Linux--popen函数

比system在应用中的好处:

       可以获取运行的输出结果

函数原型:

  #include

  FILE popen( const char *command, const char* mode )

参数说明:

  command: 是一个指向以 NULL 结束的 shell 命令字符串的指针。这行命令将被传到 bin/sh 并使用 -c 标志,shell 将执行这个命令。

  mode: 只能是读或者写中的一种,得到的返回值(标准 I/O 流)也具有和 type 相应的只读或只写类型。如果 type 是 “r” 则文件指针连接到 command 的标准输出;如果 type 是 “w” 则文件指针连接到 command 的标准输入。

返回值:

  如果调用成功,则返回一个读或者打开文件的指针,如果失败,返回NULL,具体错误要根据errno判断

  int pclose (FILE* stream)

  参数说明:

  stream:popen返回的文件指针

  返回值:

  如果调用失败,返回 -1
 

比较system函数与popen函数:

system函数下:

#include 
#include 
#include 
//函数原型:int execl(const char *path, const char *arg, ...);

int main(void)
{
        char ret[1024] = {0};

        system("ps");

        printf("ret=%s\n",ret);

        return 0;
}

运行结果:

CLC@Embed_Learn:~$ ./a1
  PID TTY          TIME CMD
 9796 pts/0    00:00:01 bash
10833 pts/0    00:00:00 a1
10834 pts/0    00:00:00 sh
10835 pts/0    00:00:00 ps
ret=

popen函数下:

#include 
#include 
#include 
//函数原型:int execl(const char *path, const char *arg, ...);
//size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

int main(void)
{
        char ret[1024] = {0};
        FILE *fp;

        fp = popen("ps","r");
        int nread = fread(ret,1,1024,fp);
        system("ps");

        printf("read ret=%d byte ret=%s\n",nread,ret);

        return 0;
}

 运行结果:

CLC@Embed_Learn:~$ ./a1
  PID TTY          TIME CMD
 9796 pts/0    00:00:01 bash
10878 pts/0    00:00:00 a1
10879 pts/0    00:00:00 sh 
10881 pts/0    00:00:00 sh
10882 pts/0    00:00:00 ps
read ret=138 byte ret=  PID TTY          TIME CMD
 9796 pts/0    00:00:01 bash
10878 pts/0    00:00:00 a1
10879 pts/0    00:00:00 sh
10880 pts/0    00:00:00 ps

你可能感兴趣的:(linux,c++,c语言)