BSD MANPAGE
2002-01-03
Aliases: fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), fdopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3), freopen(3)
manpages-zh
Chinese manual pages
man-pages-zh_tw
Traditional Chinese Linux man pages
manpages-dev
Manual pages about using GNU/Linux for development
man-pages
Linux kernel and C library user-space interface documentation
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);
FILE *fdopen(int fildes, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
DESCRIPTION 描述
函數 fopen 打開文件名爲 path 指向的字符串的文件,將一個流與它關聯。
函數 fdopen 將一個流關聯到已存在的文件描述符, fildes. 流的模式 mode (取值爲 "r", "r+", "w", "w+", "a", "a+" 之一) 必須與文件描述符的模式想匹配。新的流的定位標識被設置爲 fildes 原有的值,錯誤和文件結束標記被清除。模式 "w" 或者 "w+" 不會截斷文件。文件描述符不會被複制,在關閉由 fdopen 創建的流時,也不會被關閉。對共享內存對象實施 fdopen 的結果是未定義的。
參數 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); 一樣。 |
函數 freopen 打開名稱爲 path 指向的字符串的文件,將它與 stream 指向的流關聯。初始的流 (如果存在的話) 被關閉。參數 mode 與在函數 fopen 中用法一致。函數 freopen 主要的用處是改變與標準文本流 (stderr, stdin, 或 stdout) 相關聯的文件
RETURN VALUE 返回值
如果成功執行了 fopen, fdopen 和 freopen 將返回一個指向文件對象 FILE 的指針。否則,將返回 NULL 並將設置全局變量 errno 的值來指示錯誤發生。
ERRORS
CONFORMING TO 標準參考
函數 fopen 和 freopen 遵循 ANSI X3.159-1989 (‘‘ANSI C’’) 標準。函數 fdopen 遵循 IEEE Std1003.1-1988 (‘‘POSIX.1’’) 標準。
跋
本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
REFERENCED BY
gvpr(1), open(2), fclose(3), fcloseall(3), fflush(3), fgetc(3), fgetgrent(3), fgetpwent(3), fgetwc(3), fgetws(3), fmemopen(3), fopencookie(3), fputwc(3), fputws(3), getline(3), getmntent(3), gets(3tcl), open_memstream(3), popen(3), pthread_getattr_np(3), puts(3tcl), setbuf(3), stdin(3), mbkfopen(3), dhcp_probe(8), rfio_fopen(3), rfio_fopen64(3), mknod(2), pseudolog(1), mbkfopen(3alc), xs(1), mkdisk(1), fzopen(3), procio(3)