Linux下使用popen()执行shell命令

转载于:https://www.cnblogs.com/caosiyang/archive/2012/06/25/2560976.html

简单说一下popen()函数

函数定义

#include <stdio.h>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<string> &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); //关闭管道return resvec.size(); }

转载于:https://www.cnblogs.com/baiduboy/p/8312860.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7安装python3.7.4_Centos7升级Python3.7.4

和大家技术分享一下当我们安装完成Centos7后&#xff0c;默认系统Python的版本为2.7.5。我们希望将Python升级到最新版本。 1、安装依赖项 yum install -y openssl-devel openssl-static zlib-devel lzma tk-devel xz-devel bzip2-devel ncurses-devel gdbm-devel readline-dev…

MyEclipse移动开发教程:迁移HTML5移动项目到PhoneGap(二)

MyEclipse开年钜惠 在线购买低至75折&#xff01;立即开抢>> 【MyEclipse最新版下载】 二、将文件从HTML5项目复制到PhoneGap项目中 1. 在HTML5 app项目的www/文件夹的资源中&#xff0c;单击右键&#xff0c;然后选择Copy。 从HTML5项目复制www资源2. 将资源粘贴到新Pho…

pb graph鼠标移上显示数据_Plotly数据可视化:离线版、微软vscode版的Python的基本作图...

1 介绍&#xff1a;1.1 Plotly 是一款用来做数据分析和可视化的在线平台&#xff0c;功能非常强大。1.2 Plotly是一个非常著名且强大的开源数据可视化框架&#xff0c;它通过构建基于浏览器显示的web形式的可交互图表来展示信息。1.3 具有多种语言python、javascript、matlab、…

centos安装无线网卡驱动_CentOS下显卡驱动安装的相关思考

背景&#xff1a;最近在安装显卡驱动&#xff0c;查找了一些网上的教程&#xff0c;但总感觉思路不够清晰&#xff0c;没办法弄清背后涉及的Linux原理&#xff0c;于是参考网上教程&#xff0c;并查阅了相关资料&#xff0c;希望能对显卡驱动安装作一个梳理&#xff0c;以做记录…

获取select被选中的option的值

<select id"select"> <option>绥江</option> <option>西江</option> <option>北江</option> <option>贺江</option> <option>新兴江</option> </select> $(funct…

红石32位cpu通用计算机,我的世界无命令方块32位红石电脑装置详解

来源&#xff1a;游戏园日期&#xff1a;2019-05-14 04:03:07我的世界无命令方块32位红石电脑装置详解。那下面给大家分享的是我的世界中的一个叫做机器编号为RSC-3230的红石电脑装置哦~有喜欢的顽疾啊不妨进来看看下的这个电脑哦~喜欢的话还可以下载下面的存档哦~本作品是一台…

python字符串字面量有哪四种定义方式_Python学习笔记(四)字符串型

字符串是 Python 中最常用的数据类型。我们可以使用引号(或")来创建字符串。 在最新的Python 3版本中&#xff0c;字符串是以Unicode编码的&#xff0c;也就是说&#xff0c;Python的字符串支持多语言。 创建字符串很简单&#xff0c;只要为变量分配一个值即可 View Code …

bzoj4380[POI2015]Myjnie dp

[POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 368 Solved: 185[Submit][Status][Discuss]Description 有n家洗车店从左往右排成一排&#xff0c;每家店都有一个正整数价格p[i]。有m个人要来消费&#xff0c;第i个人会驶过第a[i]个开始…

全国计算机等级考试用报名吗,全国计算机等级考试网上报名流程及考生报名使用说明...

全国计算机等级考试网上报名流程及考生报名使用说明附件&#xff1a;考生报名使用说明(一)注册账号和登录1)考生首次登录系统需要注册登录通行证&#xff0c;若考生有通行证账号&#xff0c;可以直接登录。2)考生也可使用其他账号登录&#xff0c;例如使用“QQ账号”登录。点击…

iptables nat实验_【零基础学云计算】LVS负载均衡群集之NAT模式搭建 (实践篇)...

实验原理图实验环境LVS调度器作为web服务器池的网关LVS服务器配置两块网卡分别连接内外网使用轮询&#xff08;rr&#xff09;调度算法LVS负载调度器网段规划 内网33网关&#xff1a;192.168.144.1 外网36&#xff1a;12.0.0.1web1 192.168.144.151web2 192.168.144.170nfs服务…

rs232串口驱动_RS232与RS485在性能上有啥区别和联系?老电工总结分析,一目了然...

串口是一种非常通用的设备接口&#xff0c;是仪器仪表设备常用的通信接口&#xff0c;常用于远程采集设备数据或者实现远程控制。串口的开发也比较简单&#xff0c;它是很多工程师最喜欢的接口之一。常见的串口协议有RS-232、RS-422、RS-485等&#xff0c;它是电子工程师面对的…

win7里面计算机叫什么,Win7电脑中的mrt.exe是甚么文件

咱们正在运用Win7体系的时分&#xff0c;只有咱们翻开使命办理便能够看失到有一个mrt.exe 步伐正在运转&#xff0c;也没有知叙mrt.exe 是甚么入程的&#xff0c;否不成以制止。这Win7电脑外的mrt.exe 是甚么文件呢&#xff1f;如今便随小编一同来看看电脑外的mrt.exe是甚么文件…

svn权限配置

转载于:https://www.cnblogs.com/wzlbigdata/p/8329601.html

pytorch gather_【Pytorch】Pytorch-1.1.0 版本新特性

2019年05月01日&#xff0c;Pytorch 1.1.0 版本正式发布啦~https://github.com/pytorch/pytorch/releases/tag/v1.1.0主要的几个功能&#xff1a;1. TensorBoard (currently experimental)2. JIT 的升级 [JIT] Attributes in ScriptModules [JIT] Dictionary and List Support …

MySQL-5.7.21非图形化下载、安装、连接问题记录

1、安装包下载链接&#xff1a;https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-winx64.zip 官网&#xff1a;https://www.mysql.com/downloads/ -> Community ->MySQl Community Sever ->选择与电脑对应的版本DownLoad 2、解压安装包到自定义的文件夹…

c++定义一个动态全局变量_静态链接与动态链接的宏观概述及微观详解

静态链接与动态链接的宏观概述及微观详解第一部分 宏观概述 1. 静态链接静态链接就是在程序运行前&#xff0c;链接器通过对象文件中包含的重定位表&#xff0c;完成所有重定位操作&#xff0c;并最终形成一个在运行时不需要再次进行依赖库的加载和重定位操作&#xff08;因为所…

pwm控制舵机转动角度程序_Mixly 第15课 舵机的使用

第15课 舵机的使用舵机的旋转不像普通电机那样只是转圈圈&#xff0c;它可以根据你的指令旋转到0至180度之间的任意角度然后精准的停下来。舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的。舵机比较多的用于对角度有要求的场合&#xff0c;比如机器人、摄像…

1、初始JAVA

一、 语言的翻译分两种&#xff1a; 编译型语言&#xff1a;例如c语言、c语言 优点&#xff1a;速度快 缺点&#xff1a;不能跨平台 编译器编译——>特定平台的目标文件obj——>特定平台 解释型语言&#xff1a;例如PHP语言、JavaScript语言 优点&am…

base64 转文件_PHP伪协议与文件包含

PHP伪协议与文件包含PHP伪协议与文件包含php:// 协议php://inputphp://filterdata:// 协议file:// 协议zip://、bzip2://、zlib://协议zip://协议bzip2://协议zlib://协议phar://伪协议文件包含漏洞(File Inclusion)文件包含漏洞&#xff1a;即file inclusion&#xff0c;意思是…

redis 登录_Redis集群架构+Dubbo开发框架+SSO单点登录+Nginx+ZooKeeper

Redis集群架构【课程介绍】Redis是现在使用为广泛的NoSQL数据库技术&#xff0c;其自身不仅拥有着良好的操作性能&#xff0c;也被广泛的应用于各种集群架构的数据整合处理之中&#xff0c;而本课程将通过Redis的核心作用&#xff0c;以及单实例redis存在的问题为读者进行分析&…