【问题标题】:using fork system call使用 fork 系统调用
【发布时间】:2012-12-05 02:22:30
【问题描述】:

这是我第一次使用 fork,我希望父进程计算总和,而子进程在父进程中为总和提供输入,反之亦然,但我做不到,他们工作作为两个独立的进程!!我怎样才能做到这一点, 当我将输入作为 1 和 2 时,父母必须将总和返回为 3

int main()  {

    int num1 = 0, num2 = 0, sum = 0;
    pid_t pid;
    pid = fork();
    if(pid == -1)
        perror("fork");
    if(pid > 1)
    {
        wait(NULL);
        printf("sum:%d\n",sum = num1 + num2);
    }
    if(!pid)
    {
        printf("Enter two number\n");
        scanf("%d %d", &num1, &num2);
    }

}  

【问题讨论】:

  • “它们作为两个独立的进程工作” [status-by-design] 您想查看popen 和/或更完整进程间通信 (IPC) 的版本。或者使用线程而不是进程。

标签: c fork


【解决方案1】:

一旦你分叉,每个进程都会获得它自己的变量副本(至少从逻辑角度来看——请参阅写时复制了解更多数据),因此你不能在分叉之后更改内容并期待另一个查看这些更改的过程。

您需要使用某种进程间通信:

http://en.wikipedia.org/wiki/Inter-process_communication

您可能想查看此问题以了解更多详细信息:

UNIX Pipes Between Child Processes

【讨论】:

    【解决方案2】:

    一旦你在程序中使用 fork 系统调用,它会创建另一个进程,你不能从一个进程返回到另一个进程(子进程到父进程),所以如果你想使用 fork 系统调用在两个进程之间进行通信,则意味着使用未命名管道(进程间通信的一种方法)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 2021-04-28
      • 2011-07-13
      • 2012-02-02
      • 2016-01-13
      • 2016-12-14
      • 2015-12-22
      相关资源
      最近更新 更多