c语言中操作文件的方式

一.使用文件描述符,根据fd读写 fd:file descriptor

int fd = open("a.txt",0);    //返回的是代表文件的文件描述符
char buf[1];
while(1){
    size_t cout = read(fd,buf,1);   //返回的是读取的字符数
   if(count==0)
        break;
    printf(buf);           
}
close(fd);   //关闭由该文件描述符代表的那个文件

文件描述符是整数,从0开始递增。
其中0表示标准输入,即键盘输入,1表示标准输出,2表示标准错误输出

所以下面这一句表示从标准输入,即键盘输入中读取:

size_t count = read(0,buf,1);   

问题:通过程序的运行,我们发现在键盘上输入后,屏幕并没有马上输出,而是要输入个回车后才输出
解释:在键盘输入后,shell显示了你输入的内容,当你敲了回车后,操作系统才将shell显示的内容写入0号文件,再从0号文件中读取

二.通过fp:file pointer 操作文件

FILE * fp = fopen("a.txt","r");   //获取指向文件的指针
int count = fread(buf,1,1,fp);    //从指针指向的文件中读

从前面可以想到,也有从标准输入中读,是这样写的:

int count = fread(buf,1,1,stdin);

写到标准输出:

fprintf(stdout,"a");

补充:所以我们一般写的printf其实就是打开1号文件,进行标准输出

小细节:

看这样两行代码:

fprint(stdout,"a");
fprint(stderr,"b");

先标准输出a,再标准错误输出b,但输出结果是:ba
解释:因为标准输出的内容先放入缓存,缓存不会马上输出,而标准错误输出的优先级别很高,所以先输出了

    缓存中输出的条件:

    1.缓存区满

    2.回车

    3.flush(stdout);

    4.程序结束

所以如果程序是这样的:

fprint(stdout,"a\n");
fprint(stderr,"b");

输出结果就是:ab

例子:

int i;
for(i = 0;i < 10;i++)
    putc('0'+i,i%2?stderr:stdout);

输出结果:1357902468

三.

fgetc 从文件中获取一个字符

fgets 从文件中获取多个字符

getchar 从标准输入中读一个字符

gets 从标准输入中读多个字符

四.

第一种和第二种操作文件的方式可以相互转换

fd = fileno(fp);   //将filepointer转化为一个文件描述符
fp = fdopen(fd);  //将一个文件描述符转化为一个指向该文件的指针

 

 

转载于:https://www.cnblogs.com/zhhda/p/3344526.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值