| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2319 人关注过本帖
标题:文件的打开函数
只看楼主 加入收藏
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
收藏
得分:0 
懂了          谢谢你们
2010-02-11 23:28
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这个问题好长呀。其实缓冲这个概念是针对文件的,只要你想从 stdin 里读东西,那读的都是这个文件的缓冲区。这个文件指针是系统给你创建的,类型也是 FILE *。
2010-02-12 09:56
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
收藏
得分:0 
  stdin 是文件缓冲区         呵呵   是好长  一个书上的例题就这么多不懂        现在又看下发现还有两个不清楚的     
ch=getc(stdin))=='x'中的字符数组ch应该可以去掉吧没啥用占内存
fprintf(stderr,"\n以%s模式打开文件%s失败!\n",mode,filename);中的stderr不太清楚,网上说是标准错误输出设备,显示器?
还有个例子
#include"stdio.h"
void main()
{
fprintf(stderr, "Can't open it!\n");
fprintf(stdout, "Can't open it!\n");
printf("Can't open it!\n");
}
图片附件: 游客没有浏览图片的权限,请 登录注册

“如果转向标准输出到磁盘文件tmp.txt
my.exe > tmp.txt
Can't open it!

用TYPE 看 tmp.txt的内容:
TYPE tmp.txt
Can't open it!
Can't open it! 用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。”
可我不知道怎么转向标准输出到磁盘文件tmp.txt和怎么用用TYPE 看 tmp.txt的内容
2010-02-12 11:42
zhddragon
Rank: 5Rank: 5
等 级:职业侠客
帖 子:208
专家分:346
注 册:2009-5-14
收藏
得分:0 
这个ch=getc(stdin))=='x'通常是(ch = getc(stdin)))  == 'x'这样写的,ch在你的程序里是没什么用,但通常调getc获得一个字符后在后头的代码中是需要使用的所以需要一个变量,而且这样写还有个好处,如果if为假,可以通过检查返回值确定是getc失败还是输入的值不满足要求。


stdin、stdout和stderr这三个文件指针是c库定义的,它们分别引用标准输入设备、标准输出设备和标准错误设备。对于一般pc机来说标准输入设备通常是键盘,而标准输出设备和标准错误设备多是显示器。



身体是玩命的本钱
2010-02-12 13:59
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
收藏
得分:0 
  但怎么怎么转向标准输出到磁盘文件tmp.txt和怎么用用TYPE 看 tmp.txt的内容呢
2010-02-12 15:02
zhddragon
Rank: 5Rank: 5
等 级:职业侠客
帖 子:208
专家分:346
注 册:2009-5-14
收藏
得分:0 
如果在window下,先打开控制台(cmd),然后进入到程序所在的目录执行命令
.\pro.exe > .\tmp.txt
(假设程序名为pro.exe,要把标准输出重定向到tmp.txt中,执行完后会在pro.exe所在的目录建立一个tmp.txt文件)
TYPE是一个dos时代很古老的程序,其实就是把某个文本文件的内容输出,直接执行
TYPE .\tmp.txt
其实直接用记事本把tmp.txt文件打开也行

linux下也差不多不过没有TYPE,使用cat就好了


身体是玩命的本钱
2010-02-12 15:24
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
你是问系统是怎么转向标准输出的吗?
很明显,stdin, stdout, stderr 不是你打开的。是系统在启动你的程序之前为你打开的文件指针。
像你这样从命令行启动,命令行会先解析命令行語法,然后才执行你的程序。
它会发现你重定向了 stdout (就是 > tmp.txt 干的) ,用 < ... 可以重定向 stdin。 可能用 2> ... 能重定向 stderr。 stderr 与 stdout 在一般情况下的区别是,stderr 是无缓冲的,而 stdout 是行缓冲的。

你可把程充改写成这样:
程序代码:
#include"stdio.h"
void main(int argc, char *argv[])
{
int i = 0;
printf("%d\n", argc);
for (; i < argc; ++i)
    printf("argv[%d] = %s\n", i, argv[i]);

fprintf(stderr, "Can't open it!\n");
fprintf(stdout, "Can't open it!\n");
printf("Can't open it!\n");
}

看看效果。

另外 TYPE 是什么?我怎么没听说过?

哦……
原来翻篇过来这面还有呢,谢谢,我现在知道 TYPE 是什么了。


[ 本帖最后由 pangding 于 2010-2-12 15:35 编辑 ]
2010-02-12 15:32
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
收藏
得分:0 
娃哈哈~又是cmd啊,>的作用就是转向的吧,网上还有cmd大全,有好多功能呢,但不知道其实用的功能。
对了  我转向完后,找不到tmp.txt文件
2010-02-12 16:09
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
收藏
得分:0 
以下是引用pangding在2010-2-12 15:32:11的发言:

你是问系统是怎么转向标准输出的吗?
很明显,stdin, stdout, stderr 不是你打开的。是系统在启动你的程序之前为你打开的文件指针。
像你这样从命令行启动,命令行会先解析命令行語法,然后才执行你的程序。
它会发现 ...
果然又碰到了命令行参数了     运行你写的程序
图片附件: 游客没有浏览图片的权限,请 登录注册

但我还是没明白怎么回事,感觉文件这章好深奥,现在好蒙,我有点笨,大家别笑哈。
2010-02-12 16:31
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
收藏
得分:0 
命令行参数的作用是什么呢?难道只是为了显示出命令行参数的个数和程序的名字吗?看来我还是先查查把命令行参数弄懂来
2010-02-12 16:56
快速回复:文件的打开函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.079912 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved