LINUX.ORG.RU

Научите в pipe

 ,


0

3

Помогите написать простой shell c каналами. На вход подается строка типа «who | sort | uniq -c | sort -nk1». Нужно ее выполнить и результат вывести на экран.

Разобрал ввод, в argv сохранил аргументы для вызова execvp(). Хочется что-то вроде такого - обойти в цикле все команды и выполнить их.

  for (int i = 0; i < comlen; i++) {
    argv = parse_command(commands[i]);
    exec_command(argv);
  }

Получится ли так сделать? Нужно использовать fork и pipe. Помогите написать exec_command.



Последнее исправление: trupanka (всего исправлений: 2)

Запустите под strace'ом (с перехватом fork()) sh на исполнене вашей строки и посмотрите в каком порядке там идёт pipe(), fork(), exec().

mky ★★★★★
()
Ответ на: комментарий от mky

Вроде получилось, если обходить команды в обратном порядке. Но полного понимания работы с каналами еще нет.

trupanka
() автор топика
Ответ на: комментарий от vzzo

Нет института. Там, где объясняли, объясняли только с двумя программами (cat file.txt | wc -l). А с тремя и более уже чувствуешь себя немного телефонисткой.

У меня по крайней мере ушел целый день на это задание. И нужно будет еще почитать что-нибудь где-нибудь, т.к. не все нюансы еще понятны в этой комбинации pipe, fork, exec.

trupanka
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.