【发布时间】:2014-01-05 20:30:39
【问题描述】:
我在做我在标题中所说的事情时遇到了很大的麻烦。 基本上,我想要一个程序,比如broadcast.c,它接受来自用户的输入,然后将该输入发送到两个进程的输入。 所以如果会运行这个命令: ./广播 prog1 prog2
它将阻止等待用户的输入,然后将该输入发送到 prog1 和 prog2。
现在,我想使用管道,问题是,我不知道我必须使用 1 个管道还是 2 个管道。
广播.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
int fds1[2], fds2[2];
char buffer[120];
pipe(fds1);
pipe(fds2);
if (fork() == 0) {
close(0);
dup(fds1[0]);
close(fds1[0]);
close(fds1[1]);
execl(argv[1], argv[1], NULL);
}
if (fork() == 0) {
close(0);
dup(fds2[0]);
close(fds2[0]);
close(fds2[1]);
execl(argv[2], argv[2], NULL);
}
while(read(0, buffer, 120) != 0) {
printf("lido: %s\n", buffer);
write(fds1[0],buffer,120);
write(fds2[0],buffer,120);
}
close(1);
dup(fds1[1]);
dup(fds2[1]);
exit(0);
}
我知道这不起作用,而且可能会搞砸,所以如果你们能帮助我,那就太好了。
现在我只想在我这样做的时候这样做: ./广播 prog1 prog2 用户输入:你好
输出是: prog1 说:你好! prog2 说:你好!
基本上 prog1 和 prog2 只是在 fd 0 上使用 read 打印。
【问题讨论】:
-
哼哼有趣。不知道那件事。但是可以通过简单的分叉和复制来完成吗?
-
据我所知,并非没有一些代码来读取输入 FD 并将数据写入每个输出 FD。