popen与system

popen与system都可在C语言代码中实现shell命令的执行。

popen是不堵塞的,也就是说不会等待子进程的结束并杀死子进程,即不会管理进程。这样就需要我们认为的去杀死或忽略子进程等操作。还有就是popen会将执行的结果返回到buf中。

system是堵塞的,会自动对进程进行管理,无需我们再去对进程进行管理。另外,system不会返回执行的结果,只是会返回执行是否成功。

若想要获取system的执行结果,可参考如下代码:

int system_result(char *cmd,char *result)
{
	char buf[1024*10]={0};
	FILE *fp=NULL;

	if(buf != NULL)
	{

		memset(buf,0,sizeof(buf));
		sprintf(buf,"%s > /tmp/cmd.txt 2>&1",cmd);

		system(buf);
	
		fp=fopen("/tmp/cmd.txt","r");
		if(fp == NULL)
		{
			return -1;
		}

		if(fread(result,1024,1,fp) < 0)
		{
			return -1;
		}

		if(fclose(fp) == -1)
		{
			return -1;
		}

		if(system("rm -fR /tmp/cmd.txt"))
		{
			return -1;
		}		
	}else{
		return -1;
	}
	
	return 0;
}

完成!!

你可能感兴趣的:(C语言拾遗,Linux拾遗,linux,C高级编程)