web-dev-qa-db-ja.com

ファイルポインター(FILE * fp)をファイル記述子(int fd)に変換するにはどうすればよいですか?

fopen()の呼び出しによって返されるFILE *があります。 fsync(fd)のような呼び出しを行うために、そこからファイル記述子を取得する必要があります。ファイルポインタからファイル記述子を取得する機能は何ですか?

161
Phil Miller

適切な関数はint fileno(FILE *stream)です。 <stdio.h>にあり、POSIX標準ですが、標準Cではありません。

196
Phil Miller

fileno(FILE *)がファイル記述子を返す場合でも、stdioのバッファをバイパスしないように非常に注意してください。バッファーデータがある場合(読み取りまたはフラッシュされていない書き込み)、ファイル記述子からの読み取り/書き込みにより、予期しない結果が生じる可能性があります。

サイド質問の1つに答えるために、ファイル記述子をFILEポインターに変換するには、fdopen(3)を使用します

34