2013-03-16 17 views
12

Il mio processo si biforca più volte e ogni volta che il bambino eseguirà, voglio che esegua qualche altro programma.Quando dovrei usare O_CLOEXEC quando apro il file in Linux?

Nel processo principale apro un descrittore di file con il syscall open().

Sarebbe corretto dargli una bandiera O_CLOEXEC quindi il nuovo programma che eseguo con exec() non ha la risorsa fd?

risposta

12

Sì, a meno che non sia necessario il programma eseguito per accedere a tale descrittore di file. È inoltre possibile chiudere manualmente il descrittore di file nel processo figlio prima di chiamare exec, ma questo è più soggetto a errori.

+1

Una pratica vecchia (ma soggetta a errori) era per 'for (int = 3; i <256; i ++) close (i);' poco prima di 'execve', lasciando solo stdin, stdout, stderr ... . –

Problemi correlati