将shell命令的结果存储在C

时间:2017-11-27 18:52:18

标签: c linux shell cmd

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

find <folder_name> -name "*.bin" | wc -l

并将结果存储在我在程序中声明的变量中。我不希望结果表明命令是否成功执行,我想要的结果告诉我在目录中存在多少以.bin结尾的文件。以下代码有点无效。

char command[10];
command = system("find <folder_name> -name \"*.bin\" | wc -l")

我需要将<folder_name>作为命令行参数传递。

我如何完成这两项任务?我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:1)

检索子流程的标准输出

标准C lib中没有单一的功能。使用system您可以将stdout重定向到文件,然后使用fopen中的stdio.h进行阅读。

为避免使用文件系统,您可以使用POSIX popenhttp://pubs.opengroup.org/onlinepubs/9699919799/functions/popen.html

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

将参数传递给子流程

如果使用system,则可以使用标准字符串操作,例如sprintf来生成shell命令行。如果你的参数中有特殊字符(空格,引号等),这有点脆弱。

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