我试图在C中运行system()
命令。但我希望输出存储在字符串变量中,但后来我发现系统命令的返回值为零或数值。作为一个例子,如果我把system(ls)
结果将打印在shell中,但我想要的是把它带到一个字符串。有可能吗?
如果那是不可能的,有人可以告诉我如何将system()
命令的输出定向到文件,以便我可以从文件中读取它。
while(1){
bzero(buff,MAXLINE+1);
read(ns,buff,MAXLINE);
puts(buff);
system(buff);
send(ns,buff,strlen(buff)+1,0);
}
上面的代码没有将system命令的输出放到一个字符串中,所以我试图将输出放到一个也没有工作的文本文件中:
while(1){
FILE *f=fopen("tmp.txt","w");
bzero(buff,MAXLINE+1);
read(ns,buff,MAXLINE);
system(buff>f);
puts(buff);
send(ns,buff,strlen(buff)+1,0);
}
答案 0 :(得分:0)
如果要捕获流程输出,则应使用popen()
而不是system()
(实际上,您绝不应该使用system()
)。
快速举例:
FILE *fd = popen("ls", "r");
if(fd == NULL) {
fprintf(stderr, "Could not open pipe.\n");
return;
}
// Read process output
char buffer[BUFFER];
fgets(buffer, BUFFER, fd);
http://linux.die.net/man/3/popen
但是,我应该注意,除了从程序中执行ls
之外,还有更合适的方法来获取目录列表。以下是处理该主题的问题:How can I get the list of files in a directory using C or C++?