Score:0

ท่อ C ที่มี execlp() รหัสใช้งานได้กับคำสั่ง "head" แต่ไม่ใช่สำหรับ "sort"

ธง us

ดังนั้นงานของฉันคือเขียนฟังก์ชันที่จะทำงานดังนี้:

ป.ล. -เอฟ| 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 ครั้งสุดท้ายไม่ทำงานอีกครั้ง

bw flag
regazrding: `ถ้า (pdesk1
bw flag
โปรดอ่านหน้า MAN สำหรับ `sort` รวมถึงข้อความ: "เมื่อไม่มี FILE หรือเมื่อ FILE เป็น - ให้อ่านอินพุตมาตรฐาน"

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา