ファイルの場合、 orの呼び出しとどちらを使用する必要があるfopenかの違いは何ですか?fcloseclose
フォークされた子もファイルにアクセスできる場合、ファイルを使い終わったらどうすればよいでしょうか?
ファイルの場合、 orの呼び出しとどちらを使用する必要があるfopenかの違いは何ですか?fcloseclose
フォークされた子もファイルにアクセスできる場合、ファイルを使い終わったらどうすればよいでしょうか?
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 fcloseとman close
open()およびclose()は、ファイル記述子を返したり受け取ったりする UNIX syscall であり、 などの他の UNIX syscall とともに使用しますwrite()。fopen()およびは、およびのようなもので使用するために、fclose()を操作する標準 C ライブラリ関数です。ほとんどの場合、後者を使用する必要があります。後者はよりシンプルで、よりクロスプラットフォームです。FILE*fwritefprintf
2 番目の質問については、フォークされた子には親と同じ数値ファイル記述子がありますが、それはコピーです。彼らはそれを閉じることができますが、親と他の子に対しては引き続き開いています。(個人的には、私はファイルを開いておくのは好きではありませんfork()...私はそのような共有リソースの使用を明示的にするのが好きです。もちろん、パイプは例外です。)