linux下使用popen() 替代system()

  在项目里用system(),然后发现调用失败,返回值为-1,感觉这个函数有点不靠谱。决定用popen()来替代system().具体参考了http://blog.sina.com.cn/s/blog_8043547601017qk0.html

  具体实现如下,具体分析等有空再加上

int my_system(const char * cmd) 
{ 
  FILE * fp; 
  int res; char buf[1024]; 
  if (cmd == NULL) 
  { 
    printf("my_system cmd is NULL!\n");
    return -1;
  } 
  if ((fp = popen(cmd, "r") ) == NULL) 
  { 
    perror("popen");
    printf("popen error: %s/n", strerror(errno)); 
    return -1;   }   else   {     while(fgets(buf, sizeof(buf), fp)) // 如果需要运行常驻进程,就把读的部分注释掉     {       printf("%s", buf);     }     if ( (res = pclose(fp)) == -1)     {       printf("close popen file pointer fp error!\n"); return res;     }     else if (res == 0)     {     return res;     }     else     {       printf("popen res is :%d\n", res); return res;     }   } }

  

 

posted on 2017-08-08 15:47  萌新工程师  阅读(750)  评论(0)    收藏  举报

导航