我想實現一個功能,使循環不斷迭代,並同時從用戶獲取輸入(如果可用)。 我已經實現了以下代碼,但打印時未反映已掃描變量「a」的值。c中的非阻塞輸入
pid_t pid;
pid=fork();
if(pid == 0)
{
while(1)
{
printf("%d\n",a);
sleep(1);
}
}
else
{
while(1)
{
scanf("%d",&a);
}
}
我想實現一個功能,使循環不斷迭代,並同時從用戶獲取輸入(如果可用)。 我已經實現了以下代碼,但打印時未反映已掃描變量「a」的值。c中的非阻塞輸入
pid_t pid;
pid=fork();
if(pid == 0)
{
while(1)
{
printf("%d\n",a);
sleep(1);
}
}
else
{
while(1)
{
scanf("%d",&a);
}
}
當你做fork()時,子進程會被創建爲程序的共享文本區域,但創建子進程的數據和堆棧段與父進程不同,所以子進程總是打印a = 1。
那是因爲你有兩個單獨的進程使用fork()。如果你想遵循這種方法,你將需要使用線程。
在這種情況下,您會得到兩個不同的進程,每個進程都有它自己的a
。您可以使用Linux pipes。
如果您使用fcntl()將stdin標記爲非阻塞,然後在循環中執行您所需的操作並嘗試讀取,則速度會更快,如果沒有可用的數據並且將數據存儲在緩衝區是否可用。這將使用100%的CPU壽命。要檢查數據是否可用,你應該使用select()。
您也可以使用共享內存,但必須使用信號量來同步對共享內存段的訪問。
哦,親愛的......在一個過程中發生的事情不能影響其他過程中的變量。這些是進程,而不是單個進程內的線程。 – 2013-02-26 07:32:30