1、使用 system() 执行外部程序
system()
函数可以运行外部程序,但不能获取程序的输出。它通常用于执行简单的命令。
#include <stdlib.h> int main() { system("ls -l"); // 执行外部程序 'ls -l' 并显示目录内容 return 0; }
2、使用 popen() 获取外部程序的输出
popen()
函数比 system()
更灵活,因为它能创建一个管道来获取外部程序的输出。可以将管道的输出作为文件流来处理。
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char path[1035]; // 打开管道来执行外部命令,并获取其输出 fp = popen("ls -l", "r"); if (fp == NULL) { perror("popen failed"); return 1; } // 读取并打印输出 while (fgets(path, sizeof(path)-1, fp) != NULL) { printf("%s", path); // 打印外部程序的输出 } // 关闭文件流 fclose(fp); return 0; }
3、使用 popen() 执行命令并解析输出
如想解析外部程序的输出,可以直接读取并处理它。如希望执行 ls -l
并从中提取某些信息(如文件的大小)。
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char line[256]; fp = popen("ls -l", "r"); if (fp == NULL) { perror("popen failed"); return 1; } // 逐行读取输出并解析 while (fgets(line, sizeof(line), fp) != NULL) { int size; char filename[256]; // 假设输出格式为 "rwxr-xr-x 1 user group 12345 Jan 1 12:00 file.txt" // 我们解析出文件的大小和文件名 if (sscanf(line, "%*s %*d %*s %*s %d %*s %*s %*s %s", &size, filename) == 2) { printf("File: %s, Size: %d bytes\n", filename, size); } } fclose(fp); return 0; }
注意:popen()
运行时创建了一个进程,它的输出流就像一个文件一样,可以逐行读取或进行其他操作来处理数据。