Написание собственной оболочки на C - Как сделать более двух каналов? - PullRequest
0 голосов
/ 13 февраля 2012

Я пишу свою собственную оболочку, и у меня возникла проблема с конвейеризацией процессов.

Я правильно работаю над двумя процессами, такими как:

ls -l | sort -r

Нокогда у меня есть три команды, я не знаю, что делать.

У меня есть три метода:

run_first:

  dup2(pfd[1], 1);
  close(pfd[0]);
  execvp(cmd[0], cmd);

run_mid:

  dup2(pfd[1], 1);
  dup2(pfd[0], 1);
  execvp(cmd[0], cmd);

и run_last:

  dup2(pfd[0], 0);
  close(pfd[1]);
  execvp(cmd[0], cmd);
  perror(command_list[i][0]);

Это основные важные части, но я не могу реализовать свою логику в этих трех методах,

Я хочу, чтобы выходные данные run_first должны были вводитьсяrun_mid и я хочу передать вывод run_mid в run_last.

1 Ответ

1 голос
/ 13 февраля 2012

Когда у вас есть три команды, вам понадобятся две трубы: одна для соединения первой команды со второй и одна для соединения второй команды с третьей.(В конце концов, командная строка выглядит как first | mid | last.)

...