Linux文件操作学习:系统调用和标准I/O库
|
三、标准I/O库 有过C编程经历的人都会知道stdio头文件,它就是C语言的标准IO库,在标准IO库中,与底层文件描述符相对应的是流,它被实现为指向结构FILE的指针。IO库的函数有很多,为了与前面的内容对应,这里还是只讲与前面四个函数相对应的函数,其他的函数,你可以查一查手册页。 A、fopen库函数 fopen库函数的原型为: FILE* fopen(const char *filename, const char *mode); 它与底层系统调用open类似,成功时返回一个非空指针。失败时返回NULL。 B、fread库函数 fread库函数的原型为: size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream); 它与底层调用read相似,其作用是从stream读取nitems个长度为size的数据到ptr所指向的缓冲区中。返回值是成功读到缓冲区中的记录个数。 注:stream为用fopen函数返回的文件结构指针。 C、fwrite库函数 fwrite库函数的原型: size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream); 它与底层调用write相似,其作用是从ptr指向的缓冲区中读取nitems个长度为size到数据,并把它们写到stream所对应的文件中。 D、fclose库函数 fclose库函数的原型为: int fclose(FILE *stream); 它与系统调用close相似,其作用是关闭指定的文件流stream。 例子 同样地,下面是前一个例子的另一个实现版本,它实现的功能与先前的例子一样,不过使用的是标准I/O库,而不是系统调用,文件名为copy_stdio.c代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int c = 0;
FILE *pfin = NULL;
FILE *pfout = NULL;
//以只读方式打开数据文件
pfin = fopen("Data.txt", "r");
//以只写方式打开复制的新文件
pfout = fopen("copy_stdio.out.txt", "w");
while(fread(&c, sizeof(char), 1, pfin))//读数据
fwrite(&c, sizeof(char), 1, pfout);//写数据
//关闭文件流
fclose(pfin);
fclose(pfout);
return 0;
}
当然这里你也可以用其他的库函数来完成工作,如:用fgetc代替fread,用fputc代替fwrite等。 四、文件描述符和文件流的关系 (编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

