分类:
2008-11-04 14:54:07
5.5 opening a stream
#include FILE *fopen(const char *restrict pathname, const char *restrict type); FILE *freopen(const char *restrict pathname, const char *restrict type,
FILE *restrict fp); FILE *fdopen(int filedes, const char *type); |
All three return: file pointer if OK, NULL on error |
有三个参数可以使用,要么是文件路径,要么是一个FILE object,要么是一个file descriptor。 那么我们提供使用者三个参数的函数用来打开文件,于是就有了不同的需求:
1. 通过路径指定要打开的文件流,生成一个FILE对象
2. 将一个已存在的FILE对象与一个路径结合起来,如果FILE已经对应了一个打开的流,那么先关闭。这样可以实现在standard i/o层面的重定向。因为这个操作一般都是对stdin,stdout,stderr进行操作。所以他会将stdin等流对应的具体的文件由标准输入变为一个具体的文件。
3. 为一个已存在的descriptor建立一个FILE对象,对象的内容会根据descriptor的对应的文件的数据进行更新。
#include int fclose(FILE *fp); |
Returns: 0 if OK, EOF on error |
关闭一个流的时候,会将buffer里的数据还没有写出去的会被flush出去,还没有读取的会被discard。
在程序正常退出的时候,如果有流没有关闭,会自动关闭。