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


Автор: Ak47black 30.9.2010, 17:24
Здравствуйте.
Совсем запутался с этими пайпами.
Имею вот такой пример
Код

#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <netinet/in.h>
#include <resolv.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
/*
 *
 */
int main (int argv, char** argc)
{
    int pfildes[2];
    pid_t pid;

    pipe(pfildes);
    pid = fork();
    if (pid == 0) {
          close(pfildes[0]);
          dup2(pfildes[1], 1);
          close(pfildes[1]);
          execlp("ls", "ls", "-l", NULL);
          perror("error executing child process");
          _exit(1);
        }
    else {
          close(pfildes[1]);
          dup2(pfildes[0],0);
          close(pfildes[0]);
          execlp("cut", "cut", "-c", "44-56", NULL);
          perror("error executing child process");       
          exit(1);            
        }
}

Который запустает два приложения.
А как тоже самое сделать с тремя?
Тут ктонибудь есть кто понимает в этом деле?  smile

Добавлено через 3 минуты и 55 секунд
Мне просто нужно написать простую (shell)оболочку для unix. А там должно быть можно укать n-ое количество команд через |

Автор: djamshud 1.10.2010, 10:05
>Который запустает два приложения.

Более того, он запутал уже массу народа на форуме:)

>Мне просто нужно написать простую (shell)оболочку для unix. А там должно быть можно укать n-ое количество команд через |

Нужно: написать нормальный парсер, который выделит и запустит все указанные команды с аргументами (man 2 execv); соединит "соседние" процессы пайпами (man 7 pipe).

Автор: MAKCim 1.10.2010, 10:48
Ak47black, 
за готовым приложением в центр помощи

тут задавайте конкретные вопросы

Автор: Ak47black 1.10.2010, 14:33
Цитата(djamshud @  1.10.2010,  10:05 Найти цитируемый пост)
соединит "соседние" процессы пайпами (man 7 pipe). 

Мне вот это конкретно непонятно.
Я вот http://forum.vingrad.ru/forum/topic-311259.html выложил свою попытку решения.
Соединяю но получаю ошибки

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