打开/关闭/刷新流
1. fopen() 打开流
功能:
1)fopen()打开由 path指定的一个文件。
2)fdopen()获取一个先有的文件描述符,并使一个标准的I/O流与该描述相结合。此函数常用于由创建管道和网络通信函数小所返回的描述符。因为这些特殊类型的文件不能用标准I/O fopen函数打开,我们必须先调用设备专用函数以获得一个文件描述符,然后用fopen使一个标准I/O流与该描述符相关联。
3)fropen()在一个指定的流上打开一个指定的文件,如若该流已经打开,则先关闭该流。若流已经定向,这fopen清除该定向。吃函数一般用于将一个指定的文件代开为一个预定流,如:标准输入、标准输出和标准错误。
所需头文件:<stdio.h>
函数原型:
FILE *fopen(const char *path, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
FILE *fdopen(int fd, char *mode);
参数:
fopen: path 将要的打开的指定文件的绝对路径; mode 文件打开的方式。
freopen: path 要重定向的文件绝对路径,mode 文件打开方式, stream 已经打开的流。
fdopen:fd 已经打开的文件描述符, mode 文件打开方式。
返回值:
成功:流指针 失败:NULL
参数mode:
r,rb:以只读方式打开文件,文件必须已经存在
对应文件I/O:open(path, O_RDONLY);
r+,rb+:以读写方式打开文件,文件必须存在
w,wb:以只写方式打开文件,若文件存在,则将该文件内容清空;若文件不存在,则创建文件。
w+,wb+:以读写方式打开文件,若文件存在,则将该文件内容清空;若文件不存在,则创建文件。
a,ab:以追加方式只写打开文件,若文件不存在,则创建文件;若文件存在,写入的数据会被追加到文件末尾,文件原先的内容保留。
a+,ab+:以追加方式可读写打开文件,若文件不存在,则创建文件;若文件存在,写入的数据会被追加到文件末尾,文件原先的内容保留。
frepen()重定向使用示例
1 #include <stdio.h> 2 int main(int argc, char *argv[]) 3 { 4 FILE *fp; 5 if (argc < 2) 6 { 7 fprintf("Usage:%s filename\n", argv[0]); 8 return -1; 9 } 10 freopen(argv[1], "w", stdout); //将标准输入重定向为argv[1]所指定的文件。 11 fprintf("after freopen!\n"); 12 return 0; 13 } 14 输出结果将在argv[1]指定的文件中
2. fclose()关闭流
功能:关闭一个文件流
所需头文件 <stdio.h>
函数原型:
int fclose(FILE *fp);
参数:
fp :要关闭的流。
返回值:
调用成功返回0;失败返回EOF并设置errno
值得注意的是,fclose()在关闭流之前,会先将缓冲区里的数据输出,如果标准I/O库已经为该流分配了一个缓冲区,则释放缓冲区。
当一个进程正常终止时(直接调用exit()函数<_exit()终止的进程不会刷新流>,或从main函数返回),则所有带有未写缓存数据的标准I/O都会被刷新,所有代课的标准I/O都被关闭。
3. 刷新流
功能:强制刷新一个流。此函数使该流所有未写的数据都被传递到内核。
函数原型:
int fflush(FILE *fp);
参数:
fp:要刷新的流。