ดังนั้นงานของฉันคือเขียนฟังก์ชันที่จะทำงานดังนี้:
ป.ล. -เอฟ| tr -s ' ' :| ตัด -d: -f1 | จัดเรียง | uniq -c |เรียงลำดับ -n
นี่คือรหัสของฉัน:
เป็นโมฆะไปป์ 4()
{
int pdesk1[2];
int pdesk2[2];
int pdesk3[2];
int pdesk4[2];
int 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);
ข้อผิดพลาด ("ps");
ทางออก (1);
}
ถ้า (ส้อม () == 0)
{
dup2(pdesk1[0], 0);
dup2(pdesk2[1], 1);
ปิด (pdesk2 [0]);
ปิด (pdesk2 [1]);
ปิด (pdesk1 [0]);
ปิด (pdesk1 [1]);
execlp("tr", "tr", "-s", " ", ":", NULL);
ข้อผิดพลาด ("tr");
ทางออก (1);
}
ถ้า (ส้อม () == 0)
{
dup2(pdesk2[0], 0);
dup2(pdesk3[1], 1);
ปิด (pdesk3 [0]);
ปิด (pdesk3 [1]);
ปิด (pdesk2 [0]);
ปิด (pdesk2 [1]);
execlp("ตัด", "ตัด", "-d", ":", "-f", "1", NULL);
ข้อผิดพลาด ("ตัด");
ทางออก (1);
}
ถ้า (ส้อม () == 0)
{
dup2(pdesk3[0], 0);
// แสดงความคิดเห็นเพื่อดูผลในขณะนี้
// dup2(pdesk4[1], 1);
ปิด (pdesk4 [0]);
ปิด (pdesk4 [1]);
ปิด (pdesk3 [0]);
ปิด (pdesk3 [1]);
// นี่ไม่ได้พิมพ์อะไรเลย
execlp("เรียงลำดับ", "เรียงลำดับ", NULL);
//แต่งานนี้
// execlp("หัว", "หัว", NULL);
ข้อผิดพลาด ("เรียงลำดับ");
ทางออก (1);
}
ถ้า (ส้อม () == 0)
{
dup2(pdesk4[0], 0);
dup2(pdesk5[1], 1);
ปิด (pdesk5 [0]);
ปิด (pdesk5 [1]);
ปิด (pdesk4 [0]);
ปิด (pdesk4 [1]);
execlp("uniq", "uniq", "-c", NULL);
ข้อผิดพลาด ("uniq");
ทางออก (1);
}
ถ้า (ส้อม () == 0)
{
dup2(pdesk5[0], 0);
ปิด (pdesk5 [0]);
ปิด (pdesk5 [1]);
execlp("เรียงลำดับ", "เรียงลำดับ", "-n", NULL);
ข้อผิดพลาด ("เรียงลำดับ -n");
ทางออก (1);
}
รอ (โมฆะ);
ทางออก (1);
}
อย่างที่ฉันเขียนไว้ในความคิดเห็น จนกระทั่งการ sort part ทุกอย่างทำงานได้ดี ฉันตรวจสอบผลลัพธ์ในแต่ละกระบวนการและเปรียบเทียบกับผลลัพธ์ที่ฉันได้รับจากการเขียนคำสั่งในเทอร์มินัล
ฉันยิ่งสับสนมากขึ้นไปอีกเนื่องจากฉันพบว่าเมื่อฉันแทนที่ sort ด้วย head (หรือ cat เป็นต้น) โค้ดใช้งานได้ uniq ดูเหมือนจะทำงานได้ดีและการ sort ครั้งสุดท้ายไม่ทำงานอีกครั้ง