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