linux下c/c++调用shell脚本

news/2024/11/15 5:45:30/

linux下c/c++调用shell脚本

直接贴代码:

#include <iostream>
#include <cstring>
#include <cstdio>using namespace std;int shell_call(std::string &cmdstr);int main(int argc, char **argv)
{string shell_dir = "./test.sh";string shell_command = "cat test.cpp";shell_call(shell_command);return 0;
}int shell_call(std::string &cmdstr) {//enum { maxline=100 };int maxline = 100;             //读取的shell命令最大长度char line[maxline];            //存储读取到的shell命令FILE *fpin;                    //文件控制指针             //popen以只读方式创建管道if((fpin = popen(cmdstr.c_str(), "r")) == NULL) {printf("popen error\n");exit(-1);}while(true) {//向控制台输出字符信息,stdout为标准输出流fputs("prompt> ", stdout);        // fflush(stdout);          //显示输出缓冲区信息并清空输出缓冲区//从文件流中读取信息到line中if(fgets(line, sizeof(line), fpin) == NULL) /*read from pipe*/break;//将line中信息送入输出缓冲区显示if(fputs(line, stdout) == EOF) {printf("fputs error\n");exit(-1);}}//关闭shell执行管道int ret;if((ret = pclose(fpin)) == -1) {printf("pclose error\n");exit(-1);}return ret;
}

该程序可直接调用shell脚本文件或者shell命令,直接将shell文件路径或者shell命令传入shell_call函数即可。

代码参考自

FILE为c语言控制文件管理的结构体
FILE结构体解释

popen函数会创建通道执行shell命令,其返回值为FILE指针,其接收参数可以为shell文件路径也可以是shell命令。
其函数声明为:

FILE *popen(const char *command, const char *type);

该函数创建的通道必须由pclose函数来关闭:

int pclose ( FILE * stream );

popen函数解释

while循环中fputs("prompt> ", stdout);该行是将参数1的字符串放入标准输出流中,stdout就是标准输出流,执行脚本显示信息时会首先显示该字符串。
fflush(stdout)就是清空输出缓冲区并将其显示到终端,由于前面那句fputs已经显示输出流了,所以该句可以不加。
fflush函数详解

fgets函数会从FILE流中读取信息,每次读取一行,并存储在line中,遇到文件末尾时返回NULL,sizeof(line) - 1为最大读取的字符数。
fgets函数

fputs函数将line中的信息送入输出缓冲区显示,出错则返回EOF。
fgets和fputs

popen函数执行脚本显示的信息送入到了FILE流中,而fgets和fputs函数读取和显示每次只有一行,所以需要在外层套一个while循环。

最后fclose关闭通道,成功返回0,失败返回-1。

关于c/c++调用shell命令的其它方法也可以参考:
shell命令调用


http://www.ppmy.cn/news/334610.html

相关文章

python安装tensorflow出错

背景&#xff1a; 在git找了一个python项目&#xff08;https://github.com/testerSunshine/12306&#xff09;&#xff0c;依赖库名单里有tensorflow 1.14.0 我的环境&#xff1a; win10&#xff0c;能谷歌 python 3.8&#xff0c;习惯性在官网下了最新版本 查了pip版本&am…

骚包下^^

虽然没有什么值得炫耀的&#xff0c;但是第一次用上了三显示器的工作环境还是很高兴^^毕竟是第一次^^

:) 程序员的骚语句、骚操作

请下载国家反诈中心app&#xff0c;谨防杀猪盘、电信诈骗&#xff01; 文章目录 前言段子骚操作故事 前言 主要记录一些和程序员有趣的事等等&#xff0c;也希望大家有好东西能够分享出来&#xff0c;独乐乐不如众乐乐。 段子 程序员18个有趣的笑话&#xff1a; https://www…

撸啊

lua 和 as3 结合&#xff0c;取代现有的txt xml文本形式的配置文件&#xff0c;做到热更新. 2天时间了解了一下&#xff0c;大概流程通了&#xff0c;现在就是考虑如何封装以及用在哪些模块。待详细

撸了几行骚代码,解放了双手

大家好&#xff0c;我是二哥呀~ 作为一名技术博主&#xff0c;经常需要把同一份 MD 文件同步到不同的博客平台&#xff0c;以求获得更多的曝光&#xff0c;从而帮助到更多的小伙伴——瞧我这“达则兼济天下”的雄心壮志。像 CSDN 和掘金这两个博客平台都有自己的外链图片解析功…

加油呀 小老弟

1.nn.ModuleList() nn.ModuleList() is a container class容器类&#xff1f; in PyTorch that can be used to store a list of nn.Module objects. It is similar to the built-in Python list type, but has additional functionality specific to PyTorch modules. One …

.NET开源工具类库:Masuit.Tools

【开源框架】| 通用工具类库 这是恰童鞋骚年的第223篇原创文章 本文介绍一个我的同事【懒得勤快】&#xff08;人称勤快哥&#xff0c;我们叫他骚哥&#xff09;写的一个.NET开源工具类库项目&#xff0c;包含一些常用的操作类&#xff0c;大都是静态类&#xff0c;加密解密&am…

互联网赚钱骚操作,真的太骚了

今天是周六我们来聊一个比较俗的事&#xff1a;互联网赚钱的骚操作。 如何利用互联网热门游戏&#xff0c;空手套白狼日入上千。 全篇看完你一定会被其中的骚操作&#xff0c;刷新认识。 这也是痴海会写本文的目的&#xff1a;开拓大家互联网商业视野。 技术人眼里不应该只有技…