2

我想实现一个功能,使循环不断迭代并同时从用户那里获取输入(如果可用)。我已经实现了以下代码,但扫描变量“a”的值在打印时没有得到反映。

pid_t pid;
pid=fork();
if(pid == 0 )
{
    while(1)
    {
        printf("%d\n",a);
        sleep(1);
    }
}
else
{
    while(1)
    {
        scanf("%d",&a);
    }
}
4

5 回答 5

3

那是因为你有两个使用 fork() 的独立进程。如果您想遵循这种方法,您将需要使用线程。

于 2013-02-26T07:32:55.487 回答
2

当你创建 fork() 时,子进程将使用程序的共享文本区域创建,但创建的子进程的数据和堆栈部分与父进程不同,因此子进程将始终打印 a=1。

于 2013-02-26T08:42:46.397 回答
0

在这种情况下,您将获得两个不同的进程,每个进程都有自己的a.

您应该使用 Linux管道

于 2013-02-26T07:46:15.370 回答
0

如果您使用 fcntl() 将您的标准输入标记为非阻塞,然后在循环中执行您需要的操作并尝试读取,它会更快,如果没有可用的数据,它将失败,如果是,它将数据存储在缓冲区中可用的。这将使用 100% 的 CPU。要检查数据是否可用,您应该使用 select()。

于 2013-02-26T07:50:20.130 回答
0

您也可以使用共享内存,但您必须使用信号量来同步对共享内存段的访问。

于 2013-02-26T07:58:26.880 回答