C 如何读取系统(';ls';)的输出?
我正在用c代码做一些文件IO。我的文件中有一个特定的模式。我可以通过shell命令C 如何读取系统(';ls';)的输出?,c,linux,C,Linux,我正在用c代码做一些文件IO。我的文件中有一个特定的模式。我可以通过shell命令cat abc.txt | grep abc | wc-l来验证这一点。当我使用System()执行相同的命令时,它会给出正确的输出,但我不知道如何将其输出转换为变量并在c代码中进行比较 我尝试查看手册页,其中建议使用WEXITSTATUS()。这实际上返回的是执行状态,而不是输出状态 F1 你不需要系统(3)。请尝试使用popen(3)和朋友。你不需要system(3)。尝试popen(3)和朋友。grep和wc
cat abc.txt | grep abc | wc-l
来验证这一点。当我使用System()
执行相同的命令时,它会给出正确的输出,但我不知道如何将其输出转换为变量并在c代码中进行比较
我尝试查看手册页,其中建议使用WEXITSTATUS()
。这实际上返回的是执行状态,而不是输出状态
F1 你不需要
系统(3)
。请尝试使用popen(3)
和朋友。你不需要system(3)
。尝试popen(3)
和朋友。grep和wc正在做的是将STDIN文件句柄作为管道|操作符的一部分读取。grep和wc正在做的是将STDIN文件句柄作为管道|操作符的一部分读取。您可以尝试:
...
pid_t pid = fork();
if(pid == 0){
int fd = open("output", O_RDWR | O_CREATE);
close(1);
(void) dup(fd); // this will return 1
system(your_cmd);
// read output from fd
// close fd
// exit
}
else{
...
这将把system()执行的命令的输出重定向到您的“输出”文件。您可以尝试:
...
pid_t pid = fork();
if(pid == 0){
int fd = open("output", O_RDWR | O_CREATE);
close(1);
(void) dup(fd); // this will return 1
system(your_cmd);
// read output from fd
// close fd
// exit
}
else{
...
这将把system()执行的命令的输出重定向到您的“输出”文件。+1这里有一个例子,它们调用shell时是否也有同样的问题?@Tom我原以为唯一的主要问题是请求执行的程序不在调用进程的$PATH中。我的后台更多的是在Windows上。有关于Linux编程的快速入门书吗?+1这里有一个例子,他们没有相同的问题,调用shell吗?@Tom我认为唯一的主要问题是,如果请求执行的程序不在调用进程的$PATH中,我的背景更多的是在Windows上。有关于Linux编程的快速入门书吗?注意,不要解析
ls
的输出。请注意,对于文件IO,有比通过system()
调用shell更好的选项。注意,不要解析ls
的输出。请注意,与通过system()
调用shell相比,文件IO有更好的选项。