10

ファイルの場合、 orの呼び出しとどちらを使用する必要があるfopenかの違いは何ですか?fcloseclose

フォークされた子もファイルにアクセスできる場合、ファイルを使い終わったらどうすればよいでしょうか?

4

4 に答える 4

15

fclose()は、ファイル ストリームに関連する関数です。を使用してファイルを開きfopen()、ストリームを に割り当てると、FILE *ptr. 次にfclose()、開いているファイルを閉じるために使用します。

close()ファイル記述子に関する機能です。の助けを借りてファイルを開きopen()、記述子をint fd. 次にclose()、開いているファイルを閉じるために使用します。

などの関数はC 標準関数fopen()ですが、などの他のカテゴリは POSIX 固有です。これは、などで記述されたコードが標準 C コードではないため、移植性がないことを意味します。などで書かれたコードは標準的なコードであり、あらゆるタイプのシステムに移植できます。fclose()open()close()open()close()fopen()fclose

どちらを使用すればよいですか?

ファイルをどのように開いたかによって異なります。でファイルを開く場合fopen()は を使用し、 でファイルfclose()を開く場合open()は を使用する必要がありますclose()

フォークされた子もファイルにアクセスできる場合、ファイルを使い終わったらどうすればよいでしょうか?

fork()これは、呼び出しを行った場所 (ファイルを開く前か、開いた後 ) にも依存します。

参照: fork()ing 時にファイル記述子は共有されますか?

参照:man fcloseman close

于 2013-10-24T11:39:23.877 に答える
1

open()およびclose()は、ファイル記述子を返したり受け取ったりする UNIX syscall であり、 などの他の UNIX syscall とともに使用しますwrite()fopen()およびは、およびのようなもので使用するために、fclose()を操作する標準 C ライブラリ関数です。ほとんどの場合、後者を使用する必要があります。後者はよりシンプルで、よりクロスプラットフォームです。FILE*fwritefprintf

于 2013-10-24T11:38:49.230 に答える
0

2 番目の質問については、フォークされた子には親と同じ数値ファイル記述子がありますが、それはコピーです。彼らはそれを閉じることができますが、親と他の子に対しては引き続き開いています。(個人的には、私はファイルを開いておくのは好きではありませんfork()...私はそのような共有リソースの使用を明示的にするのが好きです。もちろん、パイプは例外です。)

于 2013-10-24T11:43:08.420 に答える