【问题标题】:Direct the output of system command直接输出系统命令
【发布时间】:2013-12-06 19:16:36
【问题描述】:

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

上面的代码没有把系统命令的输出放到一个字符串中,所以我试着把输出放到一个文本文件中,但也没有用:

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);
}

【问题讨论】:

  • system() 不是命令,而是函数。 “零或数值” - 所以零不是数字,对吧?此外,您应该使用 google 或 SO 自己的搜索工具进行一些研究 - 这已经被问了几十次了。
  • 这个问题似乎是题外话,因为它没有展示研究。
  • 我用谷歌做了 2 个小时的研究,我找到了我想要的方式,考虑到你的声誉,如果你能找到,你能不能指出以前问过的问题之一

标签: c system


【解决方案1】:

如果你想捕获进程输出,你应该使用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++?

【讨论】:

  • 实际上我想运行任何shell命令,而不仅仅是“ls”命令,但是否有可能用popen得到同样的东西??
  • 是的,popen 的第一个参数是要运行的程序。将“ls”替换为您要运行的任何程序。
猜你喜欢
  • 1970-01-01
  • 2014-08-16
  • 2016-06-03
  • 1970-01-01
  • 2013-01-18
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
相关资源
最近更新 更多