2011-07-05 35 views
0

叉EXEC我有代碼看起來像這樣在Linux中:轉換的呼叫從產卵在C

return_code= spawnp(cmd, 3, fd_map, NULL, argv, environ); 

我需要這個來自QNX轉換到Linux - 所以我需要使用叉EXEC因爲產卵在Linux中不可用。 1)如何做到這一點?這是正確的嗎 ?

pid = fork(); 
if (pid ==0) /* child */ 
    exec(cmd, argv, environ); 

2)如何傳遞參數fd_map和傳遞在產卵給exec「3」?

+0

將「看起來像...... Linux」的代碼轉換爲「Linux等效」代碼是什麼意思? – wallyk

+0

抱歉不清楚,編輯了這個問題。 – Vin

回答

1

我不知道「3」是幹什麼的。

如果你想改變現有的文件描述符子進程,你沒有在調用execfork做到這一點,但你這樣做之間通過調用closedup2等功能posix_spawn基本上做到這一點對你來說,和在Linux/glibc的,它是使用forkexec實施(所以你可以閱讀源代碼)

pid = fork(); 
if (!pid) { 
    // close, dup2 go here 
    exec(...); 
    // error 
} 
0

3表示要傳遞到fd_map文件描述符的數量和在spawnp()調用中,它允許您方便地僅選擇那些文件描述符想要傳遞給子進程。

因此,在調用fork()之後,您將在子進程中擁有所有文件描述符,因此您可以關閉那些您不感興趣的文件描述符,然後假定文件描述符未標記爲CLOEXEC(關閉執行)他們也將執行exec()的編碼。

請注意,如果您的應用程序是多線程的,則fork()將失敗,因爲直到最近的版本,QNX不支持派生線程進程。