Deci treaba mea este să scriu o funcție care va funcționa astfel:
ps -ef| tr -s ' ' :| tăiat -d: -f1 | sortare | uniq -c |sort -n
Iată codul meu:
țeavă goală4()
{
int pdesk1[2];
int pdesk2[2];
int pdesk3[2];
int pdesk4[2];
int pdesk5[2];
conductă(pdesk1);
conductă(pdesk2);
conductă(pdesk3);
teava(pdesk4);
teava(pdesk5);
dacă (pdesk1 < 0 || pdesk2 < 0 || pdesk3 < 0 || pdesk4 < 0 || pdesk5 < 0)
{
eroare("teava");
ieșire(1);
}
dacă (furcă () == 0)
{
dup2(pdesk1[1], 1);
close(pdesk1[0]);
close(pdesk1[1]);
execlp("ps", "ps", "-e", "-f", NULL);
eroare("ps");
ieșire(1);
}
dacă (furcă () == 0)
{
dup2(pdesk1[0], 0);
dup2(pdesk2[1], 1);
close(pdesk2[0]);
close(pdesk2[1]);
close(pdesk1[0]);
close(pdesk1[1]);
execlp("tr", "tr", "-s", " ", ":", NULL);
eroare("tr");
ieșire(1);
}
dacă (furcă () == 0)
{
dup2(pdesk2[0], 0);
dup2(pdesk3[1], 1);
close(pdesk3[0]);
close(pdesk3[1]);
close(pdesk2[0]);
close(pdesk2[1]);
execlp("cut", "cut", "-d", ":", "-f", "1", NULL);
eroare ("tăiat");
ieșire(1);
}
dacă (furcă () == 0)
{
dup2(pdesk3[0], 0);
// a comentat pentru a vedea rezultatul în acest moment
// dup2(pdesk4[1], 1);
close(pdesk4[0]);
close(pdesk4[1]);
close(pdesk3[0]);
close(pdesk3[1]);
//asta nu imprimă nimic
execlp("sortare", "sortare", NULL);
// dar asta funcționează
// execlp("cap", "cap", NULL);
eroare("sortare");
ieșire(1);
}
dacă (furcă () == 0)
{
dup2(pdesk4[0], 0);
dup2(pdesk5[1], 1);
close(pdesk5[0]);
close(pdesk5[1]);
close(pdesk4[0]);
close(pdesk4[1]);
execlp("uniq", "uniq", "-c", NULL);
perror("uniq");
ieșire(1);
}
dacă (furcă () == 0)
{
dup2(pdesk5[0], 0);
close(pdesk5[0]);
close(pdesk5[1]);
execlp("sortare", "sortare", "-n", NULL);
perror("sortare -n");
ieșire(1);
}
așteptați (NULL);
ieșire(1);
}
Deci, așa cum am scris în comentarii, până la partea de sortare totul funcționează bine, am verificat ieșirile din fiecare proces și le-am comparat cu rezultatele pe care le obțin scriind comanda în terminal.
Sunt și mai confuz de când am aflat că atunci când înlocuiesc sortarea cu head (sau cat de exemplu), codul funcționează, uniq pare să funcționeze bine și apoi, din nou, last sort nu funcționează.