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

Posted 萌新工程师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; 
		} 
	}
} 

  

 

以上是关于linux下使用popen() 替代system()的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统上的popen()库函数

python 中os.system和commands.getoutput的区别

pycharm下 os.system os.popen执行命令返回有中文乱码

POSIX C 中 fork() 的更轻量级替代品?

windows linux 使用python执行系统命令并将结果保存到变量

linux下如何用c语言调用shell命令