2011-07-06 56 views

回答

8

不是。所有文件描述符都在fork中繼承。你可以設置一個fd在exec上關閉,但是,通過使用fcntl(fd, F_SETFD, FD_CLOEXEC)

+3

另外請注意,您可以通過將'O_CLOEXEC'傳遞給'open'來保存'fcntl' Linux操作系統。 – Damon

+1

@Damon:或者任何符合POSIX標準的系統('O_CLOEXEC'標準化爲POSIX 2008)。 –

0

沒有它不可能。默認情況下子進程具有從父進程繼承文件表。

0

如果你真的想近距離上叉,像這樣可以工作:

static void fd_to_close; 
static void closer() 
{ 
    close(fd_to_close); 
} 

pthread_atfork(0, 0, closer); 

常閉-ON-EXEC是所期望的行爲,無論如何,雖然。