2013-02-22 60 views
2

我在编写一个显示命令提示符(这里没有问题)的C程序时遇到了麻烦,它允许用户输入unix命令&然后显示结果。我尝试了很多东西,但是我只在一年前开始编程,并且除了显示命令提示符外没有任何其他地方出现;我需要关于如何接受unix命令+显示结果的帮助。命令提示符程序:如何让用户输入unix命令?

我唯一的约束是不是用户提供绝对路径,我需要我的程序来搜索路径环境变量中指定的目录,并查找命令可执行文件的位置。我不明白如何做到这一点,但网上搜索告诉我,这将是最好的使用“getenv()访问OS PATH变量,并适当地为用户提供的命令前缀”。有人可以帮我从这里出去吗?感谢您提前给予的帮助。

+1

我想你正在寻找'popen':http://linux.die.net/man/3/popen – Jack 2013-02-22 18:00:02

回答

2

尝试popen(),在手册页中可以找到here

检查了这一点:

#include <stdio.h> 
#include <stdlib.h> 

void write_netstat(FILE * stream) 
{ 
      FILE * outfile; 
      outfile = fopen("output.txt","w"); 
      char line[128]; 

      if(!ferror(stream)) 
      { 
        while(fgets(line, sizeof(line), stream) != NULL) 
        { 
           fputs(line, outfile); 
           printf("%s", line); 
        } 
        fclose(outfile); 
      } 
      else 
      { 
        fprintf(stderr, "Output to stream failed.n"); 
        exit(EXIT_FAILURE); 
      } 
} 

int main(void) 
{ 
      FILE * output; 
      output = popen("netstat", "r"); 

      if(!output) 
      { 
        fprintf(stderr, "incorrect params or too many files.n"); 
        return EXIT_FAILURE; 
      } 

      write_netstat(output); 

      if(pclose(output) != 0) 
      { 
        fprintf(stderr, "Could not run 'netstat' or other error.n"); 
      } 
      return EXIT_SUCCESS; 
} 

此打印netstat到一个文件中。您可以为所有命令执行此操作。它使用popen()。我写了它,因为我需要一个netstat的日志。

+0

谢谢!我结束了使用popen – user2100364 2013-03-05 17:41:18

+0

没问题。很高兴我能帮上忙! – 2013-03-05 18:55:16