C 语言popen函数,实现shell和读取内容
创始人
2024-05-24 10:35:24
0

目录

1. popen()函数

2. 描述

3. 示例


1. popen()函数

头文件:#include

函数原型:FILE * popen(const char * command, const char * type);

关闭文件流:int pclose(FILE * stream);

  函数popen 先执行fork,然后调用exec以执行cmd,并且返回一个标准I/O文件指针。

  cmd是一个包含shell命令的字符串指针(以NULL结束字符结尾);
  如果type是"r",则文件指针连接到cmd的标准输出;
  如果type是"w",则文件指针连接到cmd的标准输入。

2. 描述

  popen() 函数用创建管道的方式启动一个进程, 并调用 shell. 因为管道是被定义成单向的, 所以type参数只能定义成只读或者只写, 不能是两者同时, 结果流也相应的是只读或者只写.

  command 参数是一个字符串指针, 指向的是 一个以 null 结束符结尾的字符串, 这个字符串包含一个 shell 命令. 这个命令被送到 /bin/sh 以 -c 参数执行, 即由 shell 来执行. type 参数也是一个 指向以 null 结束符结尾的字符串的指针, 这个字符串必须是 'r' 或者 'w’ 来指明是读还是写.

   popen() 函数的返回值是一个普通的标准I/O流, 它只能用 pclose() 函数来关闭, 而不是 fclose() 函数.

  注意, popen 函数的输出流默认是被全缓冲的;pclose 函数等待相关的进程结束并返回一个 command 命令的退出状态, 就像 wait4 函数 一样

3. 示例

下面示例是将shell命令行下ls -l打印的所有内容保存到句柄fp,然后通过while (fgets(buf, 255, fp) !=NULL)将ls -l输出的所有信息进行逐行保存到buf中,并打印输出。

#include int main(void)
{FILE * fp;if ((fp = popen("ls -l", "r)) == NULL){perror("open failed!");return -1;}char but[256];/*下面将ls -l输出的所有信息进行逐行保存到buf中,并打印输*/while (fgets(but, 255, fp) != NULL) {    printf("%s", buf);}if (pclose(fp) == -1){perror("close failed!");return -2;}return 0;
}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...