2015-11-17 38 views
1

例如假設父功能有:父函數可以告訴孩子是否已經寫入stdin嗎?

scanf("%s", str); 
if (strcmp(str,"test")==0) 
    printf("Success!\n); 

,這裏是孩子的功能:

signal(SIGUSR1, speak); 
sleep(5); 
kill(0, SIGUSR1) 

和睡眠功能是:

void speak() 
{ 
    puts("test"); 
} 

爲什麼父功能永遠不會成功?是否因爲puts函數不能從鍵盤寫入?有沒有辦法解決這個問題?

+2

是的,這很常見。閱讀關於*管道*。另外,閱讀['fputs()'](http://man7.org/linux/man-pages/man3/puts.3.html) –

+0

我試圖避免管道。 fputs()會獨自工作嗎? – john

+0

不,不能,而是因爲'stdin'不是寫流,家長可以肯定的是,孩子*沒有*將其寫入到自己的'stdin'或給母公司。 –

回答

0

怎麼來的父函數永遠不會達到成功?是否因爲puts函數不能從鍵盤寫入?有沒有辦法解決這個問題?

我想你允許子進程從父進程繼承其標準流,以便它們由父進程和子進程共享。你似乎有一個非常奇怪的想法,寫入stdout的數據應該反饋到stdin。雖然可以通過創建管道和重新分配標準流來安排這一點,但這樣做並不是正常的,更不用說自動化。

如果你想通過流我兩個進程之間進行IPC/O,那麼他們之間建立一個管道的幾個方法可以做到這一個,也可能是最容易的。特別是當過程與父母/孩子相關時。

0

我們可以做重定向,而無需使用pipe.As據我瞭解你的目標是在子進程和父進程的標準輸入讀取打印到標準輸出。

這是一個解決方案: freopen("myfile.txt","r",stdin); ------>在創建子進程後,在父進程中執行此操作。

freopen("myfile.txt","w",stdout); ------>在創建後的獨生子女爲此在子進程。

相關問題