直接输出系统命令

时间:2013-12-06 19:16:36

标签: c system

我试图在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);
}

1 个答案:

答案 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++?