Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何读取系统(';ls';)的输出?_C_Linux - Fatal编程技术网

C 如何读取系统(';ls';)的输出?

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

我正在用c代码做一些文件IO。我的文件中有一个特定的模式。我可以通过shell命令
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有更好的选项。