C中的进程管理:将数据发送到父进程

时间:2013-11-02 18:15:59

标签: c linux process

我正在为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);
    }
}

但是,这看起来并没有"正确"对我来说(退出应该返回进程'退出状态以进行错误处理,而不是随机整数)。是否有更清洁的方式来发送"父进程的结果没有使用这个技巧?

3 个答案:

答案 0 :(得分:1)

最简洁的方法是阅读子进程的标准输出。

在C中,涉及管道:)

它并不像你想象的那么糟糕。查看使用popen的标准示例。

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

答案 1 :(得分:1)

如果你真的想避免使用管道,并且愿意使用更加模糊的机制,我建议你研究sigqueue(3),你可以用它来向另一个进程发送一个整数。

答案 2 :(得分:1)

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

查找shmgetshmat个功能