Si', ma io voglio sapere se quell'intero si riferisce effettivamente ad un fd oppure e' solo... un intero !
A me in particolare interessa stdin (fd 0)
Ad esempio nel seguente pezzo di codice (non scritto da me) il programma vuole chiudere stdin per i suoi motivi. Il problema e' che quando lo chiamo dal window manager (fvwm) stdin viene chiuso da questi e quindi quando il programma cerca di chiuderlo (e dirottare tutto su /dev/null) il programma si pianta.
Codice:
/* codice originale */
/* ... */
int fd;
fd = open("/dev/null", O_RDONLY);
if (fd > 0)
{
close(0);
dup2(fd, 0);
close(fd);
}
Se le funzioni si limitassero a ritornare un errore potrei semplicemente controllare il valore di ritorno di close ed in caso evitare la chiamata a dup2. Purtroppo pero' invece il programma si pianta col messaggio "Fatal IO error 9 (bad file descriptor)".
Spero di essermi chiarito meglio ora