2016-12-01 17 views
5

私はすべての場所でこれを行い、いくつかのレガシーコードを持っている:無効なファイル記述子を閉じると何が行われますか?

int fd; // open a file 

if(fd == -1) 
{ 
    close(fd); 
} 

これは私にとって非常に間違って見えます。

は、有効、無効なファイルディスクリプタをクローズされていますか?マニュアルに従って

+0

*これは私にとって非常に間違って見えます。*合意しました。そのコードの背後にある "思考"は...面白かったに違いない。 –

答えて

4

正常に完了するとは、0の値が返されます。それ以外の場合は、 の値が -1が返され、エラーを示すグローバル整数変数errnoが設定されます。

、その後は:

The close() system call will fail if: 

[EBADF]   fildes is not a valid, active file descriptor. 

その後有害な何も起こりません。

4

エラーコードが返されます。が間違っていますですが、とにかくreturnの値がチェックされていないため、どちらも有用ではありません。 man page

戻り値

close()リターンを引用

成功した場合は0。エラーの場合、-1が返され、errnoが適切に設定されます。

エラー

EBADF
fd有効なオープンファイル記述子ではありません。

関連する問題