การเรียกใช้โปรแกรมภายนอกจาก 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;
}
ขั้นตอนสำคัญในโค้ด
- เปิด Pipe: เรียกใช้
popen()
เพื่อเรียกใช้คำสั่งและรับตัวชี้ไฟล์fp
- ประมวลผลผลลัพธ์: ใช้
fgets()
ในลูปเพื่ออ่านแต่ละบรรทัดของผลลัพธ์จากคำสั่งจนกว่าจะไม่มีอะไรเหลือ - การจัดการผลลัพธ์: คุณสามารถพิมพ์ผลลัพธ์หรือเก็บไว้เพื่อการประมวลผลเพิ่มเติม
- ปิด Pipe: ควรใช้
pclose()
เสมอเพื่อปล่อยทรัพยากรหลังจากเสร็จสิ้นการทำงาน
ข้อพิจารณาสำหรับแพลตฟอร์มต่าง ๆ
- ฟังก์ชัน
popen()
มีอยู่ทั่วไปในสภาพแวดล้อมที่คล้าย UNIX (Linux, MacOS) แต่การสนับสนุนใน Windows จะมีข้อจำกัด จึงควรทดสอบการทำงานของคุณตามระบบปฏิบัติการที่คุณตั้งใจจะเป้าหมาย - สำหรับความต้องการที่ซับซ้อนมากขึ้นโดยเฉพาะใน Windows อาจจำเป็นต้องสำรวจ การสื่อสารระหว่างกระบวนการ ซึ่งมักจะเกี่ยวข้องกับเทคนิคขั้นสูงมากขึ้นในการส่งและรับข้อมูลระหว่างกระบวนการ
สรุป
โดยสรุป การจับผลลัพธ์จากโปรแกรมภายนาครในแอปพลิเคชัน C สามารถทำได้อย่างมีประสิทธิภาพโดยใช้ฟังก์ชัน popen()
วิธีนี้มีพลังอย่างมากสำหรับการเรียกใช้ยูทีลิตี้ที่สร้างผลลัพธ์เป็นข้อความ ด้วยการปฏิบัติตามขั้นตอนที่ระบุไว้ คุณจะสามารถรวมคำสั่งภายนอกเข้ากับแอปพลิเคชันของคุณได้อย่างง่ายดาย โดยไม่คำนึงถึงว่าคุณกำลังทำงานอยู่บน Mac, Windows หรือ Linux
อย่าลืมที่จะขยายการเรียนรู้ของคุณโดยทดลองกับคำสั่งต่าง ๆ และจัดการผลลัพธ์ของพวกเขาในรูปแบบที่หลากหลายที่เหมาะสมกับความต้องการของแอปพลิเคชันของคุณ!