Man page - fopen(3)

Packages contains this manual

Available languages:

en fr pl ja ru zh_TW zh_CN de

Manual

FOPEN

名 前
書 åŧ
čĒŦ 明
fdopen()
freopen()
čŋ” り 値
エ ナ ãƒŧ
åąž 性
æē– 拠
æŗ¨ 意
glibc で ぎ æŗ¨ 意
バ グ
é–ĸ 逪 項 į›Ž
こ ぎ 文 書 ãĢ つ い ãĻ

名 前

fopen, fdopen, freopen - ゚ ト ãƒĒ ãƒŧ ム を 開 く é–ĸ 数

書 åŧ

#include <stdio.h>

FILE *fopen(const char * pathname , const char * mode );

FILE *fdopen(int fd , const char * mode );

FILE *freopen(const char * pathname , const char * mode , FILE * stream );

glibc 向 け ぎ 抟 čƒŊ 検 æŸģ マ ク ロ ぎ čρ äģļ ( feature_test_macros (7) 参 į…§ ):

fdopen (): _POSIX_C_SOURCE

čĒŦ 明

fopen () é–ĸ 数 は 、 pathname で 指 厚 さ れ た 名 前 ぎ フ ã‚Ą イ ãƒĢ を 開 き 、 ゚ ト ãƒĒ ãƒŧ ム と įĩ ãŗ つ け る 。

åŧ• 数 mode は 、 äģĨ 下 ãĢ įļš ã 文 字 ぎ ã˛ と つ か ら 始 ぞ る 文 字 列 へ ぎ ポ イ ãƒŗ ã‚ŋ ãƒŧ で あ る (äģĨ 下 ぎ čŋ° ず る 、 čŋŊ 加 ぎ 文 字 が 垌 ãĢ įļš ã こ と も あ る ):

r

テ キ ゚ ト フ ã‚Ą イ ãƒĢ を čĒ­ ãŋ å‡ē す た め ãĢ 開 く 。 ゚ ト ãƒĒ ãƒŧ ム は フ ã‚Ą イ ãƒĢ ぎ 先 é ­ ãĢ äŊ įŊŽ ã• れ る 。

r+

čĒ­ ãŋ å‡ē し お よ ãŗ 書 き čžŧ ãŋ す る た め ãĢ 開 く 。 ゚ ト ãƒĒ ãƒŧ ム は フ ã‚Ą イ ãƒĢ ぎ 先 é ­ ãĢ äŊ įŊŽ ã• れ る 。

w

フ ã‚Ą イ ãƒĢ を 書 き čžŧ ãŋ ぎ た め ãĢ 開 く 。 フ ã‚Ą イ ãƒĢ が æ—ĸ ãĢ 存 在 す る å ´ 合 ãĢ は 長 さ ã‚ŧ ロ ãĢ 切 り 芰 め る 。 フ ã‚Ą イ ãƒĢ が ãĒ か ãŖ た å ´ 合 ãĢ は 新 た ãĢ äŊœ 成 す る 。 ゚ ト ãƒĒ ãƒŧ ム は フ ã‚Ą イ ãƒĢ ぎ 先 é ­ ãĢ äŊ įŊŽ ã• れ る 。

w+

čĒ­ ãŋ å‡ē し お よ ãŗ 書 き čžŧ ãŋ ぎ た め ãĢ 開 く 。 フ ã‚Ą イ ãƒĢ が 存 在 し ãĻ い ãĒ い å ´ 合 ãĢ は 新 た ãĢ äŊœ 成 す る 。 存 在 し ãĻ い る å ´ 合 ãĢ は 長 さ ã‚ŧ ロ ãĢ 切 り 芰 め ら れ る 。 ゚ ト ãƒĒ ãƒŧ ム は フ ã‚Ą イ ãƒĢ ぎ 先 é ­ ãĢ äŊ įŊŽ ã• れ る 。

a

čŋŊ 加 (フ ã‚Ą イ ãƒĢ ぎ 最 垌 ãĢ 書 き čžŧ む ) ぎ た め ãĢ 開 く 。 フ ã‚Ą イ ãƒĢ が 存 在 し ãĻ い ãĒ い å ´ 合 ãĢ は 新 た ãĢ äŊœ 成 す る 。 ゚ ト ãƒĒ ãƒŧ ム は フ ã‚Ą イ ãƒĢ ぎ 最 垌 ãĢ äŊ įŊŽ ã• れ る 。

a+

Open for reading and appending (writing at end of file). The file is created if it does not exist. Output is always appended to the end of the file. POSIX is silent on what the initial read position is when using this mode. For glibc, the initial file position for reading is at the beginning of the file, but for Android/BSD/MacOS, the initial file position for reading is at the end of the file.

mode 文 字 列 ãĢ は 文 字 'b' を čŋŊ 加 指 厚 す る こ と が で き 、 mode 文 字 列 ぎ 最 垌 ぎ 文 字 と し ãĻ 指 厚 す る 。 上 記 ぎ う ãĄ 2 文 字 ぎ ãƒĸ ãƒŧ ド ぎ å ´ 合 ãĢ は 2 つ ぎ 文 字 ぎ 間 ãĢ 指 厚 す る こ と も で き る 。 こ れ は C89 と ぎ äē’ æ› 性 ぎ た め だ け ãĢ ᔍ 意 さ れ た も ぎ で あ り 、 é–ĸ 数 ぎ 原 行 ãĢ 寞 し ãĻ は い か ãĒ る åŊą éŸŋ も 持 た ãĒ い 。 す ãĒ わ ãĄ 、 Linux を åĢ む 全 ãĻ ぎ POSIX æē– 拠 ã‚ˇ ゚ テ ム で は 、 こ ぎ 'b' は į„Ą čĻ– さ れ る 。 (そ ぎ äģ– ãŽ ã‚ˇ ゚ テ ム で は テ キ ゚ ト フ ã‚Ą イ ãƒĢ と バ イ ナ ãƒĒ フ ã‚Ą イ ãƒĢ を åˆĨ 々 ãĢ æ‰ą う も ぎ も あ る ぎ で 、 も し バ イ ナ ãƒĒ フ ã‚Ą イ ãƒĢ ぎ å…Ĩ å‡ē 力 を 行 い 、 そ ぎ プ ロ グ ナ ム が 非 UNIX į’° åĸƒ へ į§ģ 植 さ れ る と äēˆ æ¸Ŧ す る ãĒ ら 、 'b'を äģ˜ ã‘ ãĻ お く ぎ は 艝 い 考 え で あ る )

mode ぎ glibc ãĢ よ る æ‹Ą åŧĩ ぎ čŠŗ į´° ãĢ つ い ãĻ は 下 記 ぎ 「 æŗ¨ 意 」 を 参 į…§ 。

す ず ãĻ ぎ į”Ÿ 成 さ れ た フ ã‚Ą イ ãƒĢ は 、 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH (0666) ぎ ãƒĸ ãƒŧ ド を そ ぎ プ ロ ã‚ģ ゚ ぎ umask 値 ãĢ よ ãŖ ãĻ äŋŽ æ­Ŗ し た ãƒĸ ãƒŧ ド を 持 つ ( umask (2) を čĻ‹ よ )。

čĒ­ ãŋ å‡ē し /書 き čžŧ ãŋ ゚ ト ãƒĒ ãƒŧ ム ãĢ 寞 し ãĻ は äģģ æ„ ぎ 順 åē ã§ čĒ­ ãŋ 書 き を 行 う こ と が で き る 。 た だ し ANSI C で は 、 (å…Ĩ 力 操 äŊœ が フ ã‚Ą イ ãƒĢ ぎ æœĢ å°ž ãĢ 到 達 し た å ´ 合 を 除 い ãĻ ) å‡ē 力 と å…Ĩ 力 ぎ 間 ãĢ は フ ã‚Ą イ ãƒĢ ぎ äŊ įŊŽ æąē め é–ĸ 数 を 挟 ぞ ãĒ け れ ば ãĒ ら ãĒ い こ と ãĢ ãĒ ãŖ ãĻ い る こ と ãĢ æŗ¨ 意 さ れ た い (こ ぎ æĄ äģļ を æē€ čļŗ ã— ãĒ い å ´ 合 ãĢ は 、 čĒ­ ãŋ čžŧ ãŋ 操 äŊœ は 、 最 垌 ãĢ 書 き čžŧ ぞ れ た も ぎ で ãĒ く 、 äģĨ 前 ãĢ 書 き čžŧ ぞ れ た 値 を čŋ” す こ と を 訹 さ れ ãĻ い る )。 し た が ãŖ ãĻ 、 こ ぎ よ う ãĒ ゚ ト ãƒĒ ãƒŧ ム で ぎ čĒ­ ãŋ 書 き 操 äŊœ ぎ 間 ãĢ は fseek (3) ぞ た は fgetpos (3) 操 äŊœ を 挟 ん で お く と 艝 い だ ろ う (Linux で は æœŦ åŊ“ ãĢ åŋ… čρ と ãĒ る こ と も と き お き あ る )。 こ ぎ 操 äŊœ は čĻ‹ か け 上 äŊ• も し ãĒ い 操 äŊœ (no-op) で も 艝 い (例 え ば fseek(..., 0L, SEEK_CUR) を そ ぎ 副 æŦĄ įš„ 劚 果 で あ る 同 期 ぎ た め だ け ãĢ å‘ŧ ず ば 艝 い )。

フ ã‚Ą イ ãƒĢ を čŋŊ 加 ãƒĸ ãƒŧ ド ( mode ぎ 最 初 ぎ 文 字 を a ãĢ す る ) で 開 く と 、 こ ぎ ゚ ト ãƒĒ ãƒŧ ム ãĢ 寞 す る 書 き čžŧ ãŋ 操 äŊœ は 全 ãĻ (先 ãĢ äģĨ 下 ぎ å‘ŧ ãŗ å‡ē し を 行 ãŖ た か ぎ よ う ãĢ ) フ ã‚Ą イ ãƒĢ ぎ æœĢ å°ž で 行 わ れ る 。

fseek(stream, 0, SEEK_END);

The file descriptor associated with the stream is opened as if by a call to open (2) with the following flags:

Image grohtml-39088-1.png

fdopen()

fdopen () é–ĸ 数 は 、 æ—ĸ 存 ぎ フ ã‚Ą イ ãƒĢ デ ã‚Ŗ ゚ ク ãƒĒ プ ã‚ŋ ãƒŧ fd ãĢ ゚ ト ãƒĒ ãƒŧ ム を įĩ ãŗ つ け る 。 ゚ ト ãƒĒ ãƒŧ ム ぎ mode ("r", "r+", "w", "w+", "a", "a+" ぎ い ず れ か ) は フ ã‚Ą イ ãƒĢ デ ã‚Ŗ ゚ ク ãƒĒ プ ã‚ŋ ãƒŧ ぎ ãƒĸ ãƒŧ ド と äē’ æ› ぎ も ぎ で ãĒ け れ ば ãĒ ら ãĒ い 。 新 し い ゚ ト ãƒĒ ãƒŧ ム ぎ フ ã‚Ą イ ãƒĢ äŊ įŊŽ æŒ‡ į¤ē 子 は fd ãĢ åąž し ãĻ い る 値 ãĢ 設 厚 さ れ る 。 error と end-of-file ぎ 各 指 į¤ē 子 は ク ãƒĒ ã‚ĸ さ れ る 。 "w" お よ ãŗ "w+" ãƒĸ ãƒŧ ド で ぎ フ ã‚Ą イ ãƒĢ ぎ 切 り 芰 め は 行 わ れ ãĒ い 。 フ ã‚Ą イ ãƒĢ デ ã‚Ŗ ゚ ク ãƒĒ プ ã‚ŋ ãƒŧ ぎ 複 čŖŊ は 行 ãĒ わ れ ãĒ い 。 fdopen () で äŊœ 成 さ れ た ゚ ト ãƒĒ ãƒŧ ム が 閉 じ ら れ た と き ãĢ フ ã‚Ą イ ãƒĢ デ ã‚Ŗ ゚ ク ãƒĒ プ ã‚ŋ ãƒŧ も 閉 じ ら れ る 。 å…ą 有 ãƒĄ ãƒĸ ãƒĒ ãƒŧ ぎ ã‚Ē ブ ジ ェ ク ト へ fdopen () を 行 ãŖ た と き ぎ įĩ 果 は 厚 įžŠ さ れ ãĻ い ãĒ い 。

freopen()

freopen () é–ĸ 数 は path で 名 前 が 指 厚 さ れ た フ ã‚Ą イ ãƒĢ を 開 き 、 stream で 指 厚 さ れ た ゚ ト ãƒĒ ãƒŧ ム ãĢ 、 そ ぎ フ ã‚Ą イ ãƒĢ を įĩ ãŗ つ け る 。 も と ぎ ゚ ト ãƒĒ ãƒŧ ム は (も し 存 在 す る å ´ 合 ãĢ は ) 閉 じ ら れ る 。 mode åŧ• 数 は fopen () é–ĸ 数 と 同 じ åŊĸ で äŊŋ わ れ る 。

If the pathname argument is a null pointer, freopen () changes the mode of the stream to that specified in mode ; that is, freopen () reopens the pathname that is associated with the stream. The specification for this behavior was added in the C99 standard, which says:

In this case, the file descriptor associated with the stream need not be closed if the call to freopen () succeeds. It is implementation-defined which changes of mode are permitted (if any), and under what circumstances.

freopen () é–ĸ 数 ぎ ä¸ģ ãĒ ᔍ 途 は 、 標 æē– テ キ ゚ ト ゚ ト ãƒĒ ãƒŧ ム ( stderr , stdin , stdout ) と 寞 åŋœ äģ˜ ã‘ ら れ ãĻ い る フ ã‚Ą イ ãƒĢ を 変 更 す る こ と で あ る 。

čŋ” り 値

fopen (), fdopen (), freopen () は 成 功 す る と FILE 型 ぎ ポ イ ãƒŗ ã‚ŋ ãƒŧ を čŋ” す 。 å¤ą 敗 す る と NULL が čŋ” さ れ 、 errno が エ ナ ãƒŧ を į¤ē す 値 ãĢ ã‚ģ ッ ト さ れ る 。

エ ナ ãƒŧ

EINVAL

fopen (), fdopen (), freopen () で 与 え ら れ た mode が 不 遊 切 で あ る 。

fopen (), fdopen (), freopen () é–ĸ 数 は malloc (3) ãƒĢ ãƒŧ チ ãƒŗ で čĻ 厚 さ れ ãĻ い る エ ナ ãƒŧ で も å¤ą 敗 す る こ と が あ り 、 そ ぎ 時 は 寞 åŋœ す る 値 ãĢ errno を ã‚ģ ッ ト す る 。

fopen () é–ĸ 数 は open (2) ãƒĢ ãƒŧ チ ãƒŗ で čĻ 厚 さ れ ãĻ い る エ ナ ãƒŧ で も å¤ą 敗 す る こ と が あ り 、 そ ぎ 時 は 寞 åŋœ す る 値 ãĢ errno を ã‚ģ ッ ト す る 。

fdopen () é–ĸ 数 は fcntl (2) ãƒĢ ãƒŧ チ ãƒŗ で čĻ 厚 さ れ ãĻ い る エ ナ ãƒŧ で も å¤ą 敗 す る こ と が あ り 、 そ ぎ 時 は 寞 åŋœ す る 値 ãĢ errno を ã‚ģ ッ ト す る 。

freopen () é–ĸ 数 は open (2), fclose (3), fflush (3) 各 ãƒĢ ãƒŧ チ ãƒŗ で čĻ 厚 さ れ ãĻ い る エ ナ ãƒŧ で も å¤ą 敗 す る こ と が あ り 、 そ ぎ 時 は 寞 åŋœ す る 値 ãĢ errno を ã‚ģ ッ ト す る 。

åąž 性

こ ぎ ᝀ で äŊŋ ᔍ さ れ ãĻ い る ᔍ čĒž ぎ čĒŦ 明 ãĢ つ い ãĻ は 、 attributes (7) を 参 į…§ 。

Image grohtml-39088-2.png

æē– 拠

fopen (), freopen (): POSIX.1-2001, POSIX.1-2008, C89, C99.

fdopen (): POSIX.1-2001, POSIX.1-2008.

æŗ¨ 意

glibc で ぎ æŗ¨ 意

GNU C ナ イ ブ ナ ãƒĒ で は 、 mode ãĢ 指 厚 で き る 文 字 列 と し ãĻ 、 äģĨ 下 ぎ æ‹Ą åŧĩ が 行 わ れ ãĻ い る :
c
(glibc 2.3.3 äģĨ 降 )

open 操 äŊœ 、 そ れ ãĢ įļš ã read/write 操 äŊœ ぎ 、 ゚ ãƒŦ ッ ド ぎ 取 り æļˆ し ポ イ ãƒŗ ト (cancellation points) を äŊœ 成 し ãĒ い 。 こ ぎ フ ナ グ は fdopen () で は į„Ą čĻ– さ れ る 。

e (glibc 2.7 äģĨ 降 )

O_CLOEXEC フ ナ グ を 有 劚 ãĢ し ãĻ フ ã‚Ą イ ãƒĢ を ã‚Ē ãƒŧ プ ãƒŗ す る 。 čŠŗ į´° は open (2) を 参 į…§ 。 こ ぎ フ ナ グ は fdopen () で は į„Ą čĻ– さ れ る 。

m (glibc 2.3 äģĨ 降 )

I/O ã‚ˇ ゚ テ ム ã‚ŗ ãƒŧ ãƒĢ ( read (2), write (2)) で は ãĒ く 、 mmap (2) を äŊŋ ãŖ ãĻ フ ã‚Ą イ ãƒĢ ãĢ ã‚ĸ ク ã‚ģ ゚ し よ う と す る 。 mmap (2) を äŊŋ お う と す る ぎ は 、 čĒ­ ãŋ å‡ē し ᔍ ãĢ ã‚Ē ãƒŧ プ ãƒŗ す る フ ã‚Ą イ ãƒĢ ãĢ つ い ãĻ だ け で あ る 。

x

フ ã‚Ą イ ãƒĢ を 排 äģ– įš„ ãĢ ã‚Ē ãƒŧ プ ãƒŗ す る ( open (2) ぎ O_EXCL フ ナ グ と 同 様 )。 フ ã‚Ą イ ãƒĢ が す で ãĢ 存 在 す る å ´ 合 、 fopen () は å¤ą 敗 し 、 errno ãĢ EEXIST が ã‚ģ ッ ト さ れ る 。 こ ぎ フ ナ グ は fdopen () で は į„Ą čĻ– さ れ る 。

上 記 ぎ 文 字 ãĢ 加 え ãĻ 、 fopen () と freopen () で は mode ãĢ äģĨ 下 ぎ 書 åŧ を 指 厚 す る こ と が で き る 。

,ccs= string

指 厚 さ れ た string は 、 įŦĻ åˇ 化 文 字 集 合 ぎ 名 前 と č§Ŗ 釈 さ れ 、 ゚ ト ãƒĒ ãƒŧ ム で は ワ イ ド 文 字 ぎ ゚ ト ãƒĒ ãƒŧ ム と し ãĻ æ‰ą わ れ る 。 内 部 変 換 é–ĸ 数 で å…Ĩ å‡ē 力 時 ãĢ 文 字 集 合 string と ぎ 変 換 が 行 わ れ る 。 書 åŧ ,ccs= string が 指 厚 さ れ ãĒ い å ´ 合 は 、 ゚ ト ãƒĒ ãƒŧ ム を ワ イ ド 文 字 ぎ ゚ ト ãƒĒ ãƒŧ ム と し ãĻ æ‰ą う か は 最 初 ぎ フ ã‚Ą イ ãƒĢ 操 äŊœ 時 ãĢ æąē 厚 さ れ る 。 最 初 ぎ フ ã‚Ą イ ãƒĢ 操 äŊœ が ワ イ ド 文 字 操 äŊœ で あ ãŖ た å ´ 合 は 、 そ ぎ ゚ ト ãƒĒ ãƒŧ ム は ワ イ ド 文 字 ぎ ゚ ト ãƒĒ ãƒŧ ム と し ãĻ æ‰ą わ れ 、 įŦĻ åˇ 化 文 字 集 合 と ぎ 変 換 を 行 う é–ĸ 数 が čĒ­ ãŋ čžŧ ぞ れ る 。

バ グ

mode ぎ 個 々 ぎ フ ナ グ 文 字 ("ccs" 指 厚 ぎ 前 ぎ 文 字 ) を č§Ŗ 釈 す る 際 ãĢ 、 glibc ぎ fopen () と freopen () ぎ 原 čŖ… で は 、 mode ぎ įĸē čĒ を 最 大 7 文 字 し か 行 わ ãĒ い と い う åˆļ 限 が あ る (バ ãƒŧ ジ ョ ãƒŗ 2.14 よ り 前 ぎ glibc で は 最 大 6 文 字 だ が 、 6 文 字 で は "rb+cmxe" ãĒ お ぎ 指 厚 を 行 う ãĢ は 不 十 分 で あ ãŖ た )。 fdopen () ぎ įž 在 ぎ 原 čŖ… で は 最 大 5 文 字 ぎ mode し か č§Ŗ 釈 さ れ ãĒ い 。

é–ĸ 逪 項 į›Ž

open (2), fclose (3), fileno (3), fmemopen (3), fopencookie (3), open_memstream (3)

こ ぎ 文 書 ãĢ つ い ãĻ

こ ぎ man ペ ãƒŧ ジ は Linux man-pages プ ロ ジ ェ ク ト ぎ ãƒĒ ãƒĒ ãƒŧ ゚ 5.10 ぎ 一 部 で あ る 。 プ ロ ジ ェ ク ト ぎ čĒŦ 明 と バ グ å ą 告 ãĢ é–ĸ す る 情 å ą は https://www.kernel.org/doc/man-pages/ ãĢ 書 か れ ãĻ い る 。