2016-12-01 36 views
5

mam trochę starszych kod, który robi to w każdym miejscu:Co robi zamykanie niepoprawnego deskryptora pliku?

int fd; // open a file 

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

To wygląda bardzo źle ze mną.

Czy zamykanie niepoprawnego deskryptora pliku jest prawidłowe?

+0

* Wygląda to bardzo źle. * Uzgodnione. "Myślenie" kryjące się za tym kodem musiało być ... interesujące. –

Odpowiedz

4

Według instrukcji:

Po pomyślnym zakończeniu, wartość 0 jest zwracana. W przeciwnym razie zwracana jest wartość o wartości wynosząca -1, a globalna zmienna całkowita errno jest ustawiana w celu wskazania błędu.

, a następnie:

The close() system call will fail if: 

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

Wtedy nic szkodliwe stanie.

4

Zwraca kod błędu.Nie ma ono wartości błędnie, ale też nie jest użyteczne, ponieważ i tak nie ma sprawdzenia wartości return.

Cytując man page

Return Value

close() zwraca zero w przypadku sukcesu. W przypadku błędu zwracane jest -1 i odpowiednio ustawiane errno.

i

Błędy

EBADF
fd nie jest poprawnym deskryptor pliku otwarte.