私はPOSIX specificationを読んでいます。ファイル記述子、ファイル記述、およびストリームがどのように相互作用するかを完全に理解することはできません。POSIXファイル記述子とCファイルの相互作用
FILE* f1 = fopen("a.txt", "r");
int fno = fileno(f1);
FILE* f2 = fdopen(fno, "r");
// is it true?
assert(fileno(f2) == fno);
// does it close only f1 or f2 too?
fclose(f1);
fgetc(f2); // valid?
は(質問はコメントである。)
私は各ファイル記述子で 'fdopen'を呼び出すことができます。 – ybungalobill
ファイル記述子が他の 'FILE *'によっても使用されている場合は、2つの 'FILE * 'のうちの1つで確実に' fclose() 'を呼び出すことができるので、' fdopen() 'を一度でも確実に呼び出すことはできません。 ; 'fclose()'を確実に使用することはできません。 'fdopen()'を使う前に 'dup()'やおそらく 'dup2()'を使っていた場合は、ファイルディスクリプタを使い果たす前に 'fdopen()'を使うことができます。 –
リソースを解放するだけでなく、私はバッファリングの混乱を予想していました。 –