Как мне обработать n команд в конвейерах на C?Linux

Ответить
Anonymous
 Как мне обработать n команд в конвейерах на C?

Сообщение Anonymous »


Итак, у меня есть задание, в котором мне нужно обработать n команд, находящихся в канале. Эти команды основаны на Linux. Если я правильно понимаю, я знаю, что мне нужно создать цикл for, который постоянно разветвляет() дочерний процесс основного процесса и выполняет эти дочерние процессы, которые затем соединяются каналами. Вот мой код.

void main(void) { символ **cmds[3]; char *c1[] = { "ls", "-l", "/etc", 0 }; char *c2[] = { "head", "-n", "10", 0 }; char *c3[] = { "хвост", "-n", "5", 0 }; cmds[0] = (символ **)c1; cmds[1] = (символ **)c2; cmds[2] = (символ **)c3; int pid, статус; пид = вилка(); if(pid == 0){//дочерний процесс интервал ФД[2]; интервал инфд; интервал я; для (я = 0; я 0){ dup2(ФД[1], 1); закрыть (ФД [0]); //выполняет n-ю команду execvp(*(cmds+i)[0], *(cmds+i)); }иначе если(ppid == 0){ dup2(ФД[0], 0); закрыть(ФД[1]); //выполняет n+1-ю команду execvp(*(cmds+i+1)[0], *(cmds+i+1)); } } }иначе, если (pid > 0){//родительский процесс while((pid = wait(&status)) != -1); } } В нынешнем виде программы я могу передать только первую и вторую команды, но по какой-то причине третья команда остается совершенно незамеченной. Как мне это исправить?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»