У меня большие проблемы при выполнении того, что я сказал в заголовке. В принципе, мне нужна программа, скажем, broadcast.c, которая принимает вход от пользователя, а затем отправляет этот вход на вход двух процессов. Так что, если бы запустить эту команду: ./broadcast prog1 PROG2Перенаправить однонаправленный поток одного процесса на два процесса
Это заблокирует ожидает ввода от пользователя и затем посылает этот вход в 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 только печать с помощью чтения на дескриптором 0.
Google «Юникс тройник». – cHao
Хум интересно. Не знал об этом. Но можно ли это сделать с помощью простых вилок и дубликатов? – luispcosta
Не без кода для чтения ввода FD и записи данных на каждый выходной FD, насколько я знаю. – cHao