简单说一下popen()函数

函数定义

#include FILE* popen(const char *command , const char *type );int pclose(FILE *stream);

函数说明

popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose()函数关闭,而不是fclose()函数。pclose()函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose()返回的终止状态与shell已执行exit一样。

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

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

popen()的返回值是个标准I/O流,必须由pclose来终止。前面提到这个流是单向的(只能用于读或写)。向这个流写内容相当于写入该命令的标准输入,命令的标准输出和调用popen()的进程相同;与之相反的,从流中读数据相当于读取命令的标准输出,命令的标准输入和调用popen()的进程相同。

返回值

如果调用fork()或pipe()失败,或者不能分配内存将返回NULL,否则返回标准I/O流。popen()没有为内存分配失败设置errno值。如果调用fork()或pipe()时出现错误,errno被设为相应的错误类型。如果type参数不合法,errno将返回EINVAL。

附上一个例子:

//execute shell command

//执行一个shell命令,输出结果逐行存储在resvec中,并返回行数

int32_t myexec(const char *cmd, vector &resvec) {

resvec.clear();

FILE*pp = popen(cmd, "r"); //建立管道if (!pp) {return -1;

}char tmp[1024]; //设置一个合适的长度,以存储每一行输出while (fgets(tmp, sizeof(tmp), pp) !=NULL) {if (tmp[strlen(tmp) - 1] == '\n') {

tmp[strlen(tmp)- 1] = '\0'; //去除换行符

}resvec.push_back(tmp);

}

pclose(pp); //关闭管道returnresvec.size();

}

popen 如何获取指令执行情况_Linux下使用popen()执行shell命令相关推荐

  1. arm shell 获取本地键盘输入值_linux下获取按键响应事件【转】

    1.问题 通过一个死循环将读取键盘对应的设备文件将触发键盘事件在屏幕上打印出来,按esc退出程序 代码是在unbuntu10.04编译执行通过的 2.input_event描述 在Linux内核中,i ...

  2. linux sh文件执行情况,Linux下SH执行

    在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用shell使大量的任务自动化,shel ...

  3. xshell中重启指令_Linux下服务器重启的脚本命令

    Linux关闭和重启系统一般使用相同的命令可以实现. 在Linux系统下常用在关机/重启命令有shutdown.halt.reboot和init,但每个命令的内部工作过程是不同的. 1.shutdow ...

  4. linux中mysql导入数据库命令_linux下mysql数据库导入导出命令

    首先linux 下查看mysql相关目录 root@ubuntu14:~# whereis mysql mysql: /usr/bin/mysql--   mysql的运行路径 /etc/mysql ...

  5. linux清屏命令_linux下的7个常用命令的基本使用

    02.Linux下的7个常用命令的基本使用 小技巧: 使用[ctrl + shift + = ]可以放大终端窗口的字体显示使用[ctrl + -]可以缩小终端窗口的字体显示 ls:查看当前目录下的文件 ...

  6. hwclock设置日期_Linux 下日期显示和设置命令 date hwclock 小结

    Linux 下日期显示和设置命令 date & hwclock 小结 --- 1.1.1 设 置系统日期和时间 可以使用下列 命令修改系统时间: # date {mmddhhmiyyyy.ss ...

  7. Python下调用Linux的Shell命令

    转载:http://blog.csdn.net/my2010sam/article/details/18315785 有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文 ...

  8. python shell运行当前程序、可以按下_Python下调用Linux的Shell命令的方法

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 ...

  9. 在secureCRT下常用的一些shell 命令

    因为目前是在测试行业,需要用到很多的命令,其中会用到secureCRT,以下是一些常用命令. 1.获取root权限,一般su, su - root 等同于su -,意为切换到root并且获得root的 ...

最新文章

  1. 01_创建一个新的activityactivity配置清单文件
  2. 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--12864(ST7565P)液晶驱动(十三)...
  3. 春节红包大战7年,BAT的变与不变
  4. ARM linux内核启动时几个关键地址【转】
  5. 以下哪个不是python财经数据接口工具_这7种Python的全新玩法,大部分人都不知道!...
  6. IOC操作Bean管理XML方式(有参构造注入属性)
  7. 多模态之ViLBERT:双流网络,各自为王
  8. sql添加约束相关示例
  9. RXJAVA之Subject
  10. ASP.NET MVC入门教程(二)文章列表页、内容页的实现
  11. Face3D学习笔记(6)3DMM示例源码解析【下】从二维图片的特征点重建三维模型
  12. 华硕服务器 bios 内存 1333 显示 800,华硕服务器bios设置
  13. nginx日志中$request_body 十六进制字符(\\x22) 引号问题处理记录
  14. 浏览器安全——Web页面安全浏览器网络安全(HTTPS)浏览器系统安全
  15. 减少代码重复率的方法
  16. 【有利可图王】PS教程:将人物设计处理成五彩缤纷的抽象效果!
  17. 服务器 微信报警平台,Zabbix实现微信报警
  18. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)部分题解
  19. 运维工程师 常见的 trouble shooting 故障排错思路
  20. python程序员教你用微信给对方定位!你说回家!却还在外面鬼混?

热门文章

  1. javascript 西瓜一期 04 解释型语言与编译型语言的翻译过程
  2. jdk安装与调试笔记 20200202
  3. mysql show
  4. HTML5与Phonegap框架初步
  5. jquery实现body中点击按钮后,在tbody中显示一连串文本框
  6. slf4j 与log4j 日志管理
  7. 双向链表(不带头结点)
  8. IDEA 设置自动导入包,以及手动导入包
  9. Spring事务管理示例JDBC
  10. DTP动态协商——trunk配置、如何关闭域名解析、光接口无法up的原因详解(附图)