我想实现一个功能,使循环继续迭代,同时从用户获取输入(如果可用)。 我已经实现了以下代码,但扫描变量“a”的值在打印时没有反映出来。
pid_t pid;
pid=fork();
if(pid == 0 )
{
while(1)
{
printf("%d\n",a);
sleep(1);
}
}
else
{
while(1)
{
scanf("%d",&a);
}
}
答案 0 :(得分:3)
那是因为你有两个使用fork()的独立进程。如果你想要遵循这种方法,你将需要使用线程。
答案 1 :(得分:2)
当你创建fork()时,子进程将使用程序的共享文本区域创建,但是创建的子进程的数据和堆栈部分与父进程不同,因此child将始终打印a = 1。
答案 2 :(得分:0)
在这种情况下,您将获得两个不同的流程,每个流程都有自己的a
。
您应该使用Linux pipes。
答案 3 :(得分:0)
如果使用fcntl()将stdin标记为非阻塞然后在循环中执行您需要的操作并尝试读取它会更快,如果没有可用数据则会失败并将数据存储在缓冲区中如果它可用。这将使用100%的CPU。要检查数据是否可用,您应该使用select()。
答案 4 :(得分:0)
您也可以使用共享内存,但必须使用信号量同步对共享内存段的访问。