การเรียกใช้โปรแกรมภายนอกจาก C และการวิเคราะห์ผลลัพธ์ของมัน

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

ความท้าทาย: การเรียกใช้ยูทีลิตี้และจับผลลัพธ์ของมัน

คุณต้องการเรียกใช้ยูทีลิตี้ที่สร้างรายการสตริง (เช่น ชื่อไฟล์) และรับผลลัพธ์นั้น เป้าหมายคือการทำให้มันทำงานได้บนระบบปฏิบัติการต่าง ๆ : Windows, Mac และ Linux ในที่นี้เราจะสำรวจวิธีการที่ง่ายและมีประสิทธิภาพโดยใช้ฟังก์ชันเฉพาะใน C

ภาพรวมของวิธีการ: การใช้ popen()

สำหรับสภาพแวดล้อมที่คล้าย Unix ฟังก์ชันที่สามารถใช้ได้คือ popen() ฟังก์ชันนี้ช่วยให้คุณเรียกใช้โปรแกรมและอ่านผลลัพธ์ของมันโดยตรงในโค้ด C ของคุณ ต่อไปนี้คือความเข้าใจพื้นฐานเกี่ยวกับวิธีการทำงานของ popen():

popen() คืออะไร?

popen() ย่อมาจาก “pipe open” มันสร้าง pipe สร้างกระบวนการใหม่ และเรียกใช้งานเชลล์ในการเรียกใช้คำสั่งที่คุณระบุ ซึ่งช่วยให้คุณจับผลลัพธ์ได้เหมือนกับการอ่านจากไฟล์

การใช้งานพื้นฐานของ popen()

ไวยากรณ์พื้นฐานในการใช้ popen() มีดังนี้:

FILE *popen(const char *command, const char *type);
  • command คือสตริงที่มีคำสั่งที่คุณต้องการเรียกใช้
  • type ระบุว่าคุณต้องการเข้าถึงผลลัพธ์อย่างไร (“r” สำหรับการอ่านและ “w” สำหรับการเขียน) สำหรับการใช้งานของคุณ ควรใช้ “r”

ตัวอย่างโค้ด

นี่คือตัวอย่างง่าย ๆ ของวิธีการที่คุณสามารถเรียกใช้ยูทีลิตี้ภายนอกและอ่านผลลัพธ์ของมัน:

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *fp;
    char buffer[128];

    // เรียกใช้คำสั่ง
    fp = popen("your_utility_command_here", "r");
    if (fp == NULL) {
        perror("popen error");
        return -1;
    }

    // อ่านผลลัพธ์ทีละบรรทัด - แสดงผลลัพธ์
    while (fgets(buffer, sizeof(buffer), fp) != NULL) {
        printf("%s", buffer); // ประมวลผลผลลัพธ์ตามที่ต้องการ
    }

    // ปิดกระบวนการ
    pclose(fp);
    return 0;
}

ขั้นตอนสำคัญในโค้ด

  1. เปิด Pipe: เรียกใช้ popen() เพื่อเรียกใช้คำสั่งและรับตัวชี้ไฟล์ fp
  2. ประมวลผลผลลัพธ์: ใช้ fgets() ในลูปเพื่ออ่านแต่ละบรรทัดของผลลัพธ์จากคำสั่งจนกว่าจะไม่มีอะไรเหลือ
  3. การจัดการผลลัพธ์: คุณสามารถพิมพ์ผลลัพธ์หรือเก็บไว้เพื่อการประมวลผลเพิ่มเติม
  4. ปิด Pipe: ควรใช้ pclose() เสมอเพื่อปล่อยทรัพยากรหลังจากเสร็จสิ้นการทำงาน

ข้อพิจารณาสำหรับแพลตฟอร์มต่าง ๆ

  • ฟังก์ชัน popen() มีอยู่ทั่วไปในสภาพแวดล้อมที่คล้าย UNIX (Linux, MacOS) แต่การสนับสนุนใน Windows จะมีข้อจำกัด จึงควรทดสอบการทำงานของคุณตามระบบปฏิบัติการที่คุณตั้งใจจะเป้าหมาย
  • สำหรับความต้องการที่ซับซ้อนมากขึ้นโดยเฉพาะใน Windows อาจจำเป็นต้องสำรวจ การสื่อสารระหว่างกระบวนการ ซึ่งมักจะเกี่ยวข้องกับเทคนิคขั้นสูงมากขึ้นในการส่งและรับข้อมูลระหว่างกระบวนการ

สรุป

โดยสรุป การจับผลลัพธ์จากโปรแกรมภายนาครในแอปพลิเคชัน C สามารถทำได้อย่างมีประสิทธิภาพโดยใช้ฟังก์ชัน popen() วิธีนี้มีพลังอย่างมากสำหรับการเรียกใช้ยูทีลิตี้ที่สร้างผลลัพธ์เป็นข้อความ ด้วยการปฏิบัติตามขั้นตอนที่ระบุไว้ คุณจะสามารถรวมคำสั่งภายนอกเข้ากับแอปพลิเคชันของคุณได้อย่างง่ายดาย โดยไม่คำนึงถึงว่าคุณกำลังทำงานอยู่บน Mac, Windows หรือ Linux

อย่าลืมที่จะขยายการเรียนรู้ของคุณโดยทดลองกับคำสั่งต่าง ๆ และจัดการผลลัพธ์ของพวกเขาในรูปแบบที่หลากหลายที่เหมาะสมกับความต้องการของแอปพลิเคชันของคุณ!