4

我正在为 Operative Sytems 类做一个程序,我需要一种将整数从子进程传递给其父进程的好方法,最好不使用管道。

经过一番尝试和错误,我得到了这样的东西来完成这项工作:

pid_t pid_son;
int status;

if( (pid_son = fork()) >= 0) {
    if(pid_son == 0) {
        int result = 0;
        // Make some arithmetic
         exit(result);   
    }
    else {
        while(pid_son != wait(&status));
        printf("The result is %d\n",result);
    }
}

但这对我来说看起来并不“正确”(exit 应该返回进程的退出状态以进行错误处理,而不是随机整数)。有没有一种更简洁的方法可以在不使用此技巧的情况下将结果“发送”到父进程?

4

3 回答 3

1

共享内存也可以在这里工作。

查找shmgetshmat函数

于 2013-11-02T18:32:16.370 回答
1

如果您真的想避免管道并且愿意使用更晦涩的机制,我建议您研究一下sigqueue(3),您可以使用它来将整数发送到另一个进程。

于 2013-11-02T18:26:47.923 回答
1

最干净的方法是读取子进程的标准输出。

在C中,这涉及管道:)

它没有你想的那么可怕。查看使用popen的标准示例。

编辑:如果它是您自己进程的一个分支,而不是一个 fork-exec,那么答案仍然是管道。

于 2013-11-02T18:25:10.663 回答