0

所以我是linux中进程间通信和进程的新手,所以我真的无法弄清楚问题是什么。我编写的以下程序与我在家庭作业中遇到的问题相同,该作业包括使用冷凝管。它基本上是从孩子向父母发送一个字符,但它不会打印出该字符。
它打印出来:

hello from child
sending a
hello from parent
trying to receive...
received: reaping child

在第三行应该说

received: a

任何答案都表示赞赏,如果您对程序中的其他任何内容有任何有用的批评,也将不胜感激。谢谢大家

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>


int main(int argc, char* argv[])
{
    pid_t pid = fork();
    int comm[2];

    pipe(comm);

if (pid == 0)
{
    char send = 'a';
    int check;
    close(comm[0]);
    printf("hello from child\n");
    printf("sending %c\n", send);
    check =  write(comm[1], &send, 1);
    printf("%d\n", check);
    exit(1);
}
else if (pid > 0)
{
    char get = ' ';
    int check;
    close(comm[1]);
    printf("hello from parent\n");
    printf("trying to receive...\n");
    read(comm[0], &get, 2);
    printf("received: %c\n", get);
    printf("reaping child\n");
    wait(NULL);
    return 0;
}

return 0;

}
4

1 回答 1

2

你拿错了管子和叉子的顺序!您的进程分叉,然后两个进程都调用管道,因此正在创建 2 个单独的管道。您正在写入的那个没有人阅读它,而您正在阅读的那个没有写入任何内容。

于 2012-08-18T07:06:24.030 回答