LinuxForum.Fans
Тема

Организация канала конвеера с помощью PIPE

Автор: sizov_stanislav 7 сообщений 1817 просмотров
#381099

помогите с таким заданием....есть 4 программы на си. Первый файл печатает сообщение, второй читает и третий тоже читает....нужно написать четвертую прогу чтобы она запускала первую программу и выводила ее вывод в пайп после чего запускала бы вторую программу которая считывалабы этот вывод из пайпа, потом меняла бы его и выводила снова в пайп, после чего третья программа повторилабы действия второй но вывела бы уже результат на экран....первые три проги написал, а вот как сделать четвертую которая все это делает незнаю.....помогите

первоя программа
Код C

text
#include <stdio.h>
int main(){
printf("%d\n",65);  
return 0;}

вторая программа
Код C

text
#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
a=a+1;
printf("%d\n",a);   
return 0;

третья программа
Код C

text

#include <stdio.h>
int main(){
int a;
scanf("%d",&a);
a=a+3; 
printf("%d\n",a);   
return 0;

Пользуйтесь тегами BBCode. yars.

#381103
"sizov_stanislav" написал:
первые три проги написал, а вот как сделать четвертую которая все это делает незнаю.....помогите

первые три работают хоть?

PS: правила ваще-то запрещают такие вопросы.

#381104

и да:

text
int main()
{
  return system("prog1 | prog2 | prog3");
}
#381225
"sizov_stanislav" написал:
а вот как сделать четвертую которая все это делает незнаю

или как док сказал, в одну строчку, или как настоящий мужик: читай man 2 pipe для создания трубы, man 2 fork и man 3 execl для запуска процесса и man dup2, чтобы подменить стандартные вводы/выводы процессов....
примеров, как с ними работать в гугле много, да и в некоторых манах есть....

#381227
"Fat-Zer" написал:
или как док сказал, или как настоящий мужик:

Можно перенести в "Священные войны", но хотелось бы услышать Вашу точку зрения на разницу.

#381236
"stranger" написал:
Можно перенести в "Священные войны", но хотелось бы услышать Вашу точку зрения на разницу.

в смысле «мою точку зрения на разницу»?
чем эти методы отличаются? мне, честно говоря, лень расписывать... об этом хорошо написано в манах...
если вопрос «что лучше?» в принципе, то — ничего... всё, как всегда, зависит от задачи... я, если честно, люблю, когда у меня больше контроля, поэтому использую system() когда мне нужно сделать fork(), exec() и wait() подряд (что покрывает 50~90% задач)... в остальных случаях стараюсь делать ручками... само собой, есть исключения...
что лучше для данной задачи? хз... ИМХО для саморазвития полезно второе... вопрос нужно ли оно ТСу и осилит ли он это...

#381265
"stranger" написал:
Можно перенести в "Священные войны", но хотелось бы услышать Вашу точку зрения на разницу.

вы не умеете читать? Умеете? Ну тогда читайте:

DESCRIPTION
system() executes a command specified in command by calling /bin/sh -c command, and returns
after the command has been completed. During execution of the command, SIGCHLD will be
blocked, and SIGINT and SIGQUIT will be ignored.
Войдите или зарегистрируйтесь, чтобы ответить.