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…

中年人可以学计算机吗,中老年人学计算机与上网的操作系统是windows xp还是window7...

中老年人学计算机与上网的操作系统是windows xp还是window7《中老年人学电脑与上网》想买这本书给爸妈学&#xff0c;但是不知道操作系统什么&#xff0c;简介上也没有写&#xff0c;有没有知道的告诉我是用什么系统教的。谢谢 我是想买这本书&#xff0c;请看过这本书的人告诉…

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、…

Wireshark抓包常见问题解析(转)

1. tcp out-of-order&#xff08;tcp有问题&#xff09; 解答&#xff1a; 1&#xff09;、 应该有很多原因。但是多半是网络拥塞&#xff0c;导致顺序包抵达时间不同&#xff0c;延时太长&#xff0c;或者包丢失&#xff0c;需要重新组合数据单元 因为他们可能是通过不同的路径…

计算机专业论文范文精选,计算机毕业论文提纲范文精选

论文提纲&#xff0c;是指论文作者动笔行文前的必要准备&#xff0c;是论文构思谋篇的具体体现。下面是CN人才网为大家整理的计算机毕业论文提纲范文精选&#xff0c;欢迎参考~计算机毕业论文提纲范文精选论文题目 通过QoS配置解决大流量问题副标题 通过QoS配置保证智能化小区的…

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的红石电脑装置哦~有喜欢的顽疾啊不妨进来看看下的这个电脑哦~喜欢的话还可以下载下面的存档哦~本作品是一台…

c++心形代码_c语言心形告白代码实现

c语言心形告白代码实现1.彩色告白includeincludeincludeincludedefine U 0.1define V 0.053void SetColor(unsigned short ForeColor,unsigned short BackGroundColor){HANDLE hConGetStdHandle(STDOUTPUTHANDLE);SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColo…

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

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

python之os、sys和random模块

import os# print(os.getcwd())#获取当前目录&#xff0c;绝对路径# print(os.chdir(../))#更改当前目录&#xff0c;../的意思是退回上一级目录# print(os.getcwd())# print(os.curdir)#当前目录&#xff0c;相对路径# print(os.pardir)#当前目录&#xff0c;相对路径# print(…

审计署计算机培训心得体会,审计署计算机中级培训心得体会2018

《审计署计算机中级培训心得体会.doc》由会员分享&#xff0c;可免费在线阅读全文&#xff0c;更多与《审计署计算机中级培训心得体会2018》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、要&#xff0c;课前要有一定的预习&#xff0c;预习时不必太细致&…

python执行效率有多低_python – Scapy的低性能

我正在创建一个脚本,将来自Tap0的所有流量发送到Eth0,并将来自Eth0的所有流量发送到Tap0.在网上找到很多例子后,我设法让它发挥作用.我遇到的问题是性能非常低. 在不使用脚本的情况下在2个VM之间进行ping操作,所需时间不到1毫秒.使用脚本需要大约15ms. 当我使用scp从VM向另一个…

用计算机写词,用遗传算法让电脑写宋词

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼相逢缥缈,窗外又拂晓.长忆清弦弄浅笑,只恨人间花少. *菊不待清尊,相思飘落无痕.风雨重阳又过,登高多少黄昏.这首《清平乐.*菊》的作者是一台计算机&#xff0c;比我写的好&#xff0c;十分佩服。且平仄、押韵十分工整&#xff0c…

基本数据类型____字典

字典&#xff08;dictionary&#xff09; 形式&#xff1a;qq {key&#xff1a;value,key1&#xff0c;value1}>每一对用分号&#xff08;;&#xff09;,没两队之间用逗号(,)作用&#xff1a;存多个值&#xff0c;key-value键值对的方式存&#xff0c;取值速度快定义&#…

北京交通大学计算机系2018年录取情况,北京交通大学2018年高招录取分数线汇总...

近日&#xff0c;北京交通大学2018年高招录取分数线出炉&#xff0c;考生可查看理工、文史类一本线情况&#xff0c;具体内容如下&#xff1a;为方便您第一时间了解我校在各省的录取分数情况&#xff0c;特将相关数据发布&#xff0c;若数据有误&#xff0c;请以省招办最终公布…

[BZOJ 3647]

BZOJ 3647——可持久化并查集加强版 不会可持久化并查集先去做http://www.cnblogs.com/Fish-/p/8242582.html. 幼稚的以为直接交原来的就好了&#xff0c;结果T了&#xff01; 加个路径压缩&#xff0c;but一直RE&#xff0c;请了几位大神还是解决不了。。所以先留个坑。。 #in…

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账号”登录。点击…