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

相关文章

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav