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

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函数

发布了101 篇原创文章 · 获赞 22 · 访问量 44万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览