Puncte:0

C pipe cu execlp(). Codul funcționează pentru comanda „head”, dar nu pentru „sortare”

drapel us

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ă.

drapel bw
regazrding: `dacă (pdesk1
drapel bw
Vă rugăm să citiți pagina MAN pentru `sort`, inclusiv declarația: "Fără FILE, sau când FILE este -, citiți intrarea standard."

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.