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()
运行时创建了一个进程,它的输出流就像一个文件一样,可以逐行读取或进行其他操作来处理数据。