如何在C语言中读取`system()`命令的输出?
时间: 2024-09-25 11:08:08 浏览: 74
在C语言中,直接使用 `system()` 函数执行命令并获取其输出并不直接可行,因为它主要负责执行命令而不会将输出存储在一个变量中供程序访问。但是,如果你想要捕获命令行工具的输出,可以借助一些间接的方式来实现,例如结合管道(`pipe`)和进程上下文切换(`fork()`和`execvp()` 或 `getline()` 配合文件描述符)。
下面是一种常见的做法,通过创建子进程并读取其标准输出(stdout):
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define BUFFER_SIZE 4096
void readCommandOutput(char *command) {
pid_t pid = fork(); // 创建子进程
if (pid == 0) { // 子进程
execlp(command, command, NULL); // 执行命令替换当前进程
perror("execlp failed");
exit(1);
}
int childStdoutFd = wait(NULL); // 等待子进程结束
char output[BUFFER_SIZE];
ssize_t bytesRead;
do {
bytesRead = read(childStdoutFd, output, sizeof(output));
if (bytesRead > 0) {
output[bytesRead] = '\0'; // 添加终止字符
printf("%s", output); // 输出数据
}
} while (bytesRead > 0);
close(childStdoutFd); // 关闭fd
}
int main() {
readCommandOutput("ls -l"); // 示例命令
return 0;
}
```
这段代码创建了一个子进程来执行命令,然后通过等待子进程结束并在其`stdout`上读取数据,实现了获取命令的输出。
请注意,这只是一个基本示例,实际应用中可能需要处理更复杂的交互情况,比如错误处理、命令输出分隔等。
阅读全文