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

相关文章

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失