Итак, моя работа состоит в том, чтобы написать функцию, которая будет работать так:
пс-эф| тр -с '' :| вырезать -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, кажется, работает нормально, а затем снова последняя сортировка не работает.