gpt4 book ai didi

c - 通过管道的多条消息

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:14 24 4
gpt4 key购买 nike

我正在尝试使用管道从 parent 向 child 发送两条消息“hello World”和“Goodbye”。 child 收到消息后必须打印出来。我的问题是如何发送第二条消息。我编译并运行程序,但它只打印第一条消息。有什么建议吗?这是我的代码:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 50

void main(){

int fd[2], n, status;
char buf[MAX];
pid_t pid;
char str1[]="Hello World!\n";
char str2[]="Goodbye\n";
pipe(fd);

if((pid=fork())<0){
abort();
}

else if(pid>0){// parent code goes here
close (fd[0]); // close read channel of parent

/*Send "hello world" through the pipe*/

write(fd[1],str1,(strlen(str1))); // write to the pipe

wait(&status);

close(fd[0]);
write(fd[1],str2,(strlen(str2)));
}
else{ // child code goes here
close(fd[1]); // close write channel of child

n=read(fd[0], buf, sizeof(buf)); // reads from the pipe
write(STDOUT_FILENO, buf, n);

exit(0);
}
}

最佳答案

在父级中,只需写入两条消息,然后关闭管道的写入端:

close(fd[0]); // close read channel of pipe in parent
write (fd[1], str1, strlen(str1)); // write "hello world"
write (fd[1], str2, strlen(str2)); // write "goodbye"
close(fd[1]); // Tell child that we're done writing

wait(&status); // Wait for child to read everything and exit

在 child 中,您应该循环读取直到得到 EOF,由 read() 返回 0 指示:

close(fd[1]); // close write channel of pipe in child
while ((n = read(fd[0], buf, sizeof(buf)) > 0) { // Read until it returns 0 (EOF) or -1 (error)
write(STDOUT_FILENO, buf, n);
}
if (n < 0) { // -1 = error
perror("read from pipe");
}

关于c - 通过管道的多条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29687303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com