我有一个任务,我需要在头文件中声明一个管道。我真的不知道该怎么做。这可能是一个非常愚蠢的问题,我可能会遗漏一些明显的东西。如果你能指出我正确的方向,我将不胜感激。
谢谢你的时间。
编辑:
抱歉这个问题太含糊了。也许我需要加强我对管道的理解。
我正在尝试在两个子进程之间创建一个管道。一个孩子将随机字符写入管道,而另一个孩子将从管道中读取字符。
我想我真的不明白当我写这样的东西时会发生什么:
int fd[2];
pipe = pipe(fd);
我是否正确地说管道的写入和读取文件描述符分别放入fd[0]
和fd[1]
?如果在我关闭的一个子进程中fd[1]
,那个孩子可以被认为是我的作家,对吗?
编辑2:
好的,看起来我几乎已经弄清楚并完成了所有事情,除了我收到与文件描述符有关的错误。
我的代码如下所示:(这只是与管道相关的代码)
项目2.h
extern int fd[2];
项目2.c
int fd[2];
pipe(fd);
作家.c
close(fd[0]);
result = write(fd[1], &writeBuffer, sizeof(writeBuffer));
if(result < 0){
perror("Write");
}
读者.c
close(fd[1]);
result = read(fd[0], &readBuffer, sizeof(readBuffer))
if(result < 0){
perror("Read");
}
执行代码后,每次 read() 和 write() 迭代都会出现错误,并显示错误“错误的文件描述符”。我已经尝试在网上搜索自己来解决这个问题,但我认为我对这个材料了解得不够多,无法做到这一点。任何方向将再次不胜感激。到目前为止,所有做出贡献的人都做得很好,非常感谢。另外,如果看起来我只是让你为我做作业,我正在付出诚实的努力,这不是任务的全部。
编辑 3:
write() 系统调用是否写入标准输出?如果我只想在阅读器从管道中读取内容后打印内容怎么办?如何将它们写入管道而不将它们写入标准输出?
编辑4: 我现在已经弄清楚了一切。感谢大家的帮助。我唯一仍然好奇的是我是否能以某种方式获得父进程的状态。我已经使用 wait() 系统调用从子进程中收集了状态,并且想知道如何检索父进程的状态。