c程序-popen调用shell指令

2023-12-31 08:36
文章标签 程序 指令 调用 shell popen

本文主要是介绍c程序-popen调用shell指令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、popen和pclose函数介绍

文章 <Linux 笔记--system 函数执行shell指令>,介绍了 system 函数执行shell 指令。但是 system 函数只能获取到shell命令的返回值,而不能获取shell命令的输出结果。

这篇文章将介绍 popen 和 pclose 函数,通过调用 popen 函数来调用 shell 指令,可以获取shell命令的输出信息或者与执行的指令进行交互。 

看下 popen 函数介绍:

The  popen()  function opens a process by creating a pipe, forking, and invoking the shell.  

函数头文件:

#include <stdio.h>

函数原型:

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

描述:

The  popen()  function opens a process by creating a pipe, forking, and
invoking the shell.  Since a pipe is by definition unidirectional,  the
type  argument  may  specify  only  reading  or  writing, not both; the
resulting stream is correspondingly read-only or write-only.

二、测试代码

popen 和 pclose 需成对使用。popen 第二个参数为 "r" 和 "w"

功能 使用 ifconfig 指令获取返回的网卡信息并打印,测试代码如下:

#include <stdio.h>  
#include <string.h>  int main(int argc,char*argv[])
{  FILE *fstream=NULL;    char buff[1024];  memset(buff,0,sizeof(buff));  if(NULL==(fstream=popen("ifconfig","r"))) // ifconfig 指令   {   fprintf(stderr,"execute command failed: %s",strerror(perror));    return -1;    }   printf("%s\r\n","haha-start");  while(NULL!=fgets(buff, sizeof(buff), fstream)) // 获取 ifconfig 指令返回的数据信息{printf("%s",buff);  }printf("%s\r\n","haha-end");  pclose(fstream);  // 关闭return 0;   
}

三、测试结果

编译执行,测试结果如下:

c18bbf13ef69df9c0ac6b015f4895742.png

可以看到执行了 ifconfig 指令,并且正确获取到了返回数据结果。

这篇关于c程序-popen调用shell指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/555517

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

Python跨文件实例化、跨文件调用及导入库示例代码

《Python跨文件实例化、跨文件调用及导入库示例代码》在Python开发过程中,经常会遇到需要在一个工程中调用另一个工程的Python文件的情况,:本文主要介绍Python跨文件实例化、跨文件调... 目录1. 核心对比表格(完整汇总)1.1 自定义模块跨文件调用汇总表1.2 第三方库使用汇总表1.3 导

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装