2016-12-01 6 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() возвращает ноль в случае успеха. При ошибке возвращается -1, а errno устанавливается соответствующим образом.

и

Ошибки

EBADF
fd не является корректным дескриптором открытого файла.