Рейтинг:0

C конвейеры с execlp(). Код работает для команды «голова», но не для «сортировки».

флаг us

Итак, моя работа состоит в том, чтобы написать функцию, которая будет работать так:

пс-эф| тр -с '' :| вырезать -d: -f1 | сортировать | уникальный -c | сортировать -n 

Вот мой код:

пустая труба4()
{
  интервал pdesk1[2];
  интервал pdesk2[2];
  интервал pdesk3[2];
  интервал pdesk4[2];
  интервал pdesk5[2];

  труба (pdesk1);
  труба (pdesk2);
  труба (pdesk3);
  труба (pdesk4);
  труба (pdesk5);

  если (pdesk1 < 0 || pdesk2 < 0 || pdesk3 < 0 || pdesk4 < 0 || pdesk5 < 0)
  {
    ошибка("труба");
    выход(1);
  }

  если (вилка() == 0)
  {
    dup2(pdesk1[1], 1);
    закрыть (pdesk1 [0]);
    закрыть (pdesk1 [1]);
    execlp("ps", "ps", "-e", "-f", NULL);
    Ошибка("пс");
    выход(1);
  }

  если (вилка() == 0)
  {
    dup2(pdesk1[0], 0);
    dup2(pdesk2[1], 1);
    закрыть (pdesk2 [0]);
    закрыть (pdesk2 [1]);
    закрыть (pdesk1 [0]);
    закрыть (pdesk1 [1]);
    execlp("tr", "tr", "-s", " ", ":", NULL);
    Ошибка("тр");
    выход(1);
  }
  если (вилка() == 0)
  {
    дубликат2(pdesk2[0], 0);
    dup2(pdesk3[1], 1);
    закрыть (pdesk3 [0]);
    закрыть (pdesk3 [1]);
    закрыть (pdesk2 [0]);
    закрыть (pdesk2 [1]);
    execlp("вырезать", "вырезать", "-d", ":", "-f", "1", NULL);
    Ошибка("Вырезать");
    выход(1);
  }
  если (вилка() == 0)
  {
    дубликат2(pdesk3[0], 0);
    // прокомментировал, чтобы увидеть результат в данный момент
    // dup2(pdesk4[1], 1);
    закрыть (pdesk4 [0]);
    закрыть (pdesk4 [1]);
    закрыть (pdesk3 [0]);
    закрыть (pdesk3 [1]);
    //это ничего не печатает 
    execlp("сортировка", "сортировка", NULL);
    // но это работает
    // execlp("head", "head", NULL);
    ошибка("сортировка");
    выход(1);
  }

  если (вилка() == 0)
  {
    dup2(pdesk4[0], 0);
    dup2(pdesk5[1], 1);
    закрыть (pdesk5 [0]);
    закрыть (pdesk5 [1]);
    закрыть (pdesk4 [0]);
    закрыть (pdesk4 [1]);
    execlp("uniq", "uniq", "-c", NULL);
    ошибка("уникальный");
    выход(1);
  }

  если (вилка() == 0)
  {
    dup2(pdesk5[0], 0);
    закрыть (pdesk5 [0]);
    закрыть (pdesk5 [1]);
    execlp("сортировка", "сортировка", "-n", NULL);
    ошибка("сортировка -n");
    выход(1);
  }
  подождите (НУЛЬ);
  выход(1);
}

Итак, как я писал в комментариях, вплоть до части сортировки все работает нормально, я проверил выходные данные в каждом процессе и сравнил их с результатами, которые я получил, написав команду в терминале.

Я еще больше запутался, так как обнаружил, что когда я заменяю сортировку на голову (или кошку, например), код работает, uniq, кажется, работает нормально, а затем снова последняя сортировка не работает.

флаг bw
относительно: `if (pdesk1
флаг bw
Пожалуйста, прочитайте страницу MAN для сортировки, включая утверждение: «Без ФАЙЛА или когда ФАЙЛ равен -, читать стандартный ввод».

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.