Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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
将shell命令的结果存储在C中的变量中_C_Linux_Shell_Cmd - Fatal编程技术网

将shell命令的结果存储在C中的变量中

将shell命令的结果存储在C中的变量中,c,linux,shell,cmd,C,Linux,Shell,Cmd,我想在C程序中执行以下shell命令: find <folder_name> -name "*.bin" | wc -l find-name“*.bin”| wc-l 并将结果存储在我在程序中声明的变量中。我不希望结果表明命令是否成功执行,我希望结果告诉我目录中存在多少以.bin结尾的文件。下面的代码显然不起作用 char command[10]; command = system("find <folder_name> -name \"*.bin\" | wc -l

我想在C程序中执行以下shell命令:

find <folder_name> -name "*.bin" | wc -l
find-name“*.bin”| wc-l
并将结果存储在我在程序中声明的变量中。我不希望结果表明命令是否成功执行,我希望结果告诉我目录中存在多少以.bin结尾的文件。下面的代码显然不起作用

char command[10];
command = system("find <folder_name> -name \"*.bin\" | wc -l")
char命令[10];
command=system(“find-name\”*.bin\“| wc-l”)
我需要将
作为命令行参数传递

如何完成这两项任务?非常感谢您的帮助。

检索子流程的标准输出 在标准C库中没有这样的函数。使用
system
可以将stdout重定向到一个文件,然后使用
fopen
stdio.h
读取它

为了避免使用文件系统,可以使用POSIX
popen

#包括
文件*popen(const char*命令,const char*模式);
将参数传递给子流程 如果使用
system
,则可以使用标准字符串操作,例如
sprintf
生成shell命令行。如果参数中有特殊字符(空格、引号等),这就有点脆弱了

要直接传递参数,可以使用POSIX
execl
,这也在上面的
popen
文档中提到。

请参阅
#include <stdio.h>
FILE *popen(const char *command, const char *mode);