linux c语言 system系统调用与popen的使用

来源:互联网 发布:jmysql数据库启动服务 编辑:程序博客网 时间:2024/06/12 02:45

system系统调用有很多诟病,很多人推荐使用popen

1.popen的函数原型为:

#include<stdio.h>

FILE*popen(const char* command,const char* type);

popen的实现是:通过fork产生一个子进程,然后子进程来执行command对应的命令,并且创建了一个管道,这个管道的作用是实现这个子进程与调用进程之间的命令、参数以及返回值的传递(本来管道就是一种进程间通信方式)。

popen的返回值是个标准I/O流,并且这个流是单向的,须由pclose来关闭,pclose的函数原型见下面。

popen返回的I/O流的方向由参数type确定,type参数只能是w(写)和r(读)中的一个,如果 type 是 "r" 则fopen返回的文件指针连接到 command 的标准输出;如果 type 是 "w" 则文件指针连接到 command 的标准输入。

2.pclose函数原型

#include<stdio.h>

int pclose(FILE*stream);

3.一个简单的用popen实现的ping调用实例

int getStatus(std::string cmd){        int status=-1;        FILE* fp=popen(cmd.c_str(),"r");        if(fp){                status=0;                char* res=new char[1024];                while(fgets(res,1024,fp)!=NULL){                        std::cout<<res;                }        }        pclose(fp);        return status;}

参见:1.百度百科:linux c popen

            2.Linux下使用system()函数一定要谨慎

            3.【IPC通信】基于管道的popen和pclose函数

0 0
原创粉丝点击