進行我在標題中所說的話時,遇到了很大的麻煩。 基本上,我想要一個程序,比如說broadcast.c,它接受來自用戶的輸入,然後將該輸入發送到兩個進程的輸入。 因此,如果將運行此命令: ./broadcast prog1 prog2將一個進程的stdout重定向到兩個進程
它會阻止等待來自用戶的輸入,然後將該輸入發送到prog1和prog2。
現在,我想使用管道,事情是,我不知道如果我必須使用1管道或2管道。
broadcast.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);
}
我知道這並不工作,它可能會混亂,所以如果你們能幫助我走出這將是巨大的。
現在我只是想,當我做: ./broadcast PROG1 PROG2 用戶輸入:你好
輸出是: PROG1說:你好! prog2說:你好!
基本上PROG1和PROG2只是打印使用的FD 0
谷歌「UNIX三通」。 – cHao
嗡有趣。對此不知道。但是可以用簡單的叉子和嘟嘟來完成嗎? – luispcosta
不是沒有一些代碼來讀取輸入FD並將數據寫入每個輸出FD,據我所知。 – cHao