Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Вопрос по pipe


Автор: DissDoc 6.6.2007, 14:07
Вот код
Код

#include <stdio.h>
#define READ 0
#define WRITE 1

main(int argc, char *argv[])
 {
  int fd[2];
  pipe(fd); //создается пайп
 if (fork()!=0) //родитель будет писать
    {close(fd[READ]);  //закрываем ненужный конец чтения
     dup2(fd[WRITE],1); //записали вывод, который будет дублироваться
    close(fd[WRITE]); //закрываем конец для записи
    execlp(argv[1],argv[1],NULL); //запуск писания
    perror(“connect”); //никогда не будет
   }
else //ребенок читает
    {close(fd[WRITE]); //закрываем неиспользуемый конец для записи
     dup2(fd[READ],0); //дублируем используемый конец в stdiо
     close(fd[READ]); //закрываем используемый конец
     execlp(argv[2],argv[2],NULL); //запуск читателя
     perror(“connect”);//никогда не будет
  }

В результате я должен в консоле ввести например
$./myprog who и мне выдастться что-то =\ Но ничего не происходит... Где ошибка?

а при вводе ./myprog who|wc -l просто выдается 0 =\

Автор: MAKCim 6.6.2007, 18:04
Код

#include <stdio.h>
#define READ 0
#define WRITE 1
main(int argc, char *argv[])
 {
  int fd[2];
  pipe(fd); //создается пайп
  pid_t pid = fork(); 
if (fork()!=0) //родитель будет писать
    {close(fd[READ]);  //закрываем ненужный конец чтения
     dup2(fd[WRITE],1); //записали вывод, который будет дублироваться
    execlp(argv[1],argv[1],NULL); //запуск писания
   }
else //ребенок читает
    {close(fd[WRITE]); //закрываем неиспользуемый конец для записи
     dup2(fd[READ],0); //дублируем используемый конец в stdiо
     execlp(argv[2],argv[2], "-l", NULL); //запуск читателя
  }

строка
./prog who wc
нормально работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)