2010-09-01 22 views
3

iPhone SDK允許fork()pipe()這個傳統的unix函數嗎?我似乎無法讓他們工作。iPhone上的Fork()

編輯

問題解決了。在這裏,我爲遇到類似於我的問題的任何人提供解決方案。我受到了這個主題中答案的啓發。

在iPhone中,沒有辦法分叉一個進程。但是,實現管道並非不可能。在我的項目中,我創建了一個新的POSIX線程(請閱讀Apple的文檔以瞭解如何執行此操作)。子線程將與父線程共享由pipe()創建的文件描述符。子線程和父線程可以通過管道進行通信。例如,我的子線程dup2()fd [1]到它的標準輸出。所以任何標準輸出都可以在父線程中捕獲。類似於fd [0]和標準輸入。

僞代碼(我沒有代碼可用,但你的想法):如果你想你的iPhone應用程序中使用第三方庫

int fd[2]; 
pipe(fd); 
create_posix_thread(&myThread, fd); 
char buffer[1024]; 
read(fd[0], buffer, 1024); 
printf("%s", buffer); // == "Hello World"  

void myThread(int fd[]) 
{ 
    dup2(fd[1], STANDARD_OUTPUT); 
    printf("Hello World"); 
} 

的策略是非常方便的。但是,問題在於使用printf()的標準調試不再可用。在我的項目中,我只是將所有調試輸出指向標準錯誤,XCode會將輸出顯示到其控制檯。

回答

6

你不能fork(),但你可以使用任意數量的線程,現在你甚至可以在iPhone上使用GCD來保持線程的合理使用。

爲什麼要fork()而不是隻使用更多的線程?

+0

你說得對。我試圖使用fork(),因爲這是UNIX中的標準做法。另外,如果我們在不同的進程中使用printf(),它不會影響子進程。 iPhone不允許這樣做,所以我決定切換到多個線程。 – SmallChess 2010-09-21 05:06:06

4

沒有。你也不能執行。你有1個過程。