私はすべての場所でこれを行い、いくつかのレガシーコードを持っている:無効なファイル記述子を閉じると何が行われますか?
int fd; // open a file
if(fd == -1)
{
close(fd);
}
これは私にとって非常に間違って見えます。
は、有効、無効なファイルディスクリプタをクローズされていますか?マニュアルに従って
私はすべての場所でこれを行い、いくつかのレガシーコードを持っている:無効なファイル記述子を閉じると何が行われますか?
int fd; // open a file
if(fd == -1)
{
close(fd);
}
これは私にとって非常に間違って見えます。
は、有効、無効なファイルディスクリプタをクローズされていますか?マニュアルに従って
:
正常に完了するとは、0の値が返されます。それ以外の場合は、 の値が -1が返され、エラーを示すグローバル整数変数errnoが設定されます。
、その後は:
The close() system call will fail if: [EBADF] fildes is not a valid, active file descriptor.
その後有害な何も起こりません。
エラーコードが返されます。が間違っていますですが、とにかくreturn
の値がチェックされていないため、どちらも有用ではありません。 man page
戻り値
は
close()
リターンを引用成功した場合は0。エラーの場合、-1が返され、errnoが適切に設定されます。
と
エラー
EBADF
fd
有効なオープンファイル記述子ではありません。
*これは私にとって非常に間違って見えます。*合意しました。そのコードの背後にある "思考"は...面白かったに違いない。 –