Provided by: manpages-zh_1.5.1-2_all bug

NAME

       fopen, fdopen, freopen - 打开流

SYNOPSIS览
       #include <stdio.h>

       FILE *fopen(const char *path, const char *mode);
       FILE *fdopen(int fildes, const char *mode);
       FILE *freopen(const char *path, const char *mode, FILE *stream);

DESCRIPTION述
       函数 fopen 打开文件名为 path 指向的字符串的文件,将一个流与它关联。

       参数               mode              指向一个字符串,以下列序列之一开始
       (序列之后可以有附加的字符):

       r      打开文本文件,用于读。流被定位于文件的开始。

       r+     打开文本文件,用于读写。流被定位于文件的开始。

       w      将文件长度截断为零,或者创建文本文件,用于写。流被定位于文件的开始。

       w+     打开文件,用于读写。如果文件不存在就创建它,否则将截断它。流被定位于文件的开始。

       a      打开文件,用于追加
              (在文件尾写)。如果文件不存在就创建它。流被定位于文件的末尾。

       a+     打开文件,用于追加
              (在文件尾写)。如果文件不存在就创建它。读文件的初始位置是文件的开始,但是输出总是被追加到文件的末尾。

       字符串              mode              也可以包含字母              ``b''
       作为最后一个字符,或者插入到上面提到的任何双字符的字符串的两个字符中间。这样只是为了和
       ANSI               X3.159-1989               (``ANSI               C'')
       标准严格保持兼容,没有实际的效果;在所有的遵   POSIX   的系统中,``b''
       都被忽略,包括
       Linux。(其他系统可能将文本文件和二进制文件区别对待,如果在进行二进制文件的
       I/O,那么添加   ``b''   是个好主意,因为你的程序可能会被移植到非   Unix
       环境中。)

       任何新建的文件将具有模式
       S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH
       (0666),然后以进程的掩码值 umask 加以修改 (参见 umask(2)) 。

       在读/写流上进行的读和写操作可以以任意的顺序混合使用。注意    ANSI     C
       要求文件定位函数只能插入在输出和输入之间,除非输入操作遇到了文件结束符。(如果没有遇到这种情况,那么读取总是能返回除了最近写入内容之外的结果。)
       因此,最好            (在             Linux             中有时是必须的)
       在对这样的流进行的写和读操作之间加入一个     fseek     或是     fgetpos
       操作。这个操作可以是对显式的定位的调用 (例如在 fseek(..., 0L, SEEK_CUR)
       中那样),利用同时发生的副作用。(?)

       以追加方式打开文件      (以      a      作为     mode     的第一个字符)
       将使得所有后续的对这个流的写操作发生在文件末尾,就好像在写之前调用了
              fseek(stream,0,SEEK_END);
       一样。

       函数 fdopen 将一个流关联到已存在的文件描述符, fildes.   流的模式  mode
       (取值为     "r",     "r+",     "w",     "w+",     "a",    "a+"    之一)
       必须与文件描述符的模式想匹配。新的流的定位标识被设置为    fildes     -
       有的值,错误和文件结束标记被清除。模式        "w"       或者       "w+"
       不会截断文件。文件描述符不会被复制,在关闭由                     fdopen
       创建的流时,也不会被关闭。对共享内存对象实施 fdopen 的结果是未定义的。

       函数   freopen   打开名称为   path   指向的字符串的文件,将它与  stream
       指向的流关联。初始的流 (如果存在的话) 被关闭。参数 mode 与在函数  fopen
       中用法一致。函数  freopen  主要的用处是改变与标准文本流 (stderr, stdin,
       或 stdout) 相关联的文件

RETURN VALUE值
       如果成功执行了 fopen, fdopenfreopen  将返回一个指向文件对象  FILE
       的指针。否则,将返回 NULL 并将设置全局变量 errno 的值来指示错误发生。

ERRORS

       EINVALfopen, fdopen, 或 freopen 提供的参数 mode 非法。

       函数  fopen,  fdopenfreopen  也有可能失败并置  errnomalloc(3)
       指定的值。

       函数 fopen 也有可能失败并置 errnoopen(2) 指定的值。

       函数 fdopen 也有可能失败并置 errnofcntl(2) 指定的值。

       函数 freopen 也有可能失败并置 errnoopen(2), fclose(3) 和  fflush(3)
       指定的值。

CONFORMING TO考
       函数  fopenfreopen  遵  ANSI X3.159-1989 (``ANSI C'') 标准。函数
       fdopen 遵 IEEE Std1003.1-1988 (``POSIX.1'') 标准。

SEE ALSO见
       open(2), fclose(3), fileno(3)