执行Shell命令与获取命令结果的方法

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

简介

可以执行shell命令的函数:

  1. system()
  2. exec()
  3. popen()
    可以获取命令执行结果的方法:
  4. popen()
  5. 无名管道

1. system

NAME
       system - execute a shell command

SYNOPSIS
       #include <stdlib.h>

       int system(const char *command);

RETURN VALUE
       The return value of system() is one of the following:

       *  If command is NULL, then a nonzero value if a shell is available, or 0 if no shell is available.
		
       *  If  a child process could not be created, or its status could not be retrieved, the return value
          is -1.

       *  If a shell could not be executed in the child process, then the return value is  as  though  the
          child shell terminated by calling _exit(2) with the status 127.

       *  If  all system calls succeed, then the return value is the termination status of the child shell
          used to execute command.  (The termination status of a shell is the termination  status  of  the
          last command it executes.)

       In  the  last  two cases, the return value is a "wait status" that can be examined using the macros
       described in waitpid(2).  (i.e., WIFEXITED(), WEXITSTATUS(), and so on).

       system() does not affect the wait status of any other children.

2. exec函数簇

调用exec函数时,该调用ecec的进程执行的程序完全替换为新程序,但并不创建新进程,前后进程的ID并不改变。exec只是用磁盘上的一个新程序替换了当前进程的正文段、数据段、堆段和栈段。一般先fork出子进程再做该动作。

3. popen()和pclose()

常见操作是创建一个连接到另一个进程(shell的命令行)的管道,然后读其输出或向其输入端发送数据。
工作原理:popen先执行fork,然后调用exec执行cmdstring,并返回一个标准的I/O文件指针。

NAME
       popen, pclose - pipe stream to or from a process

SYNOPSIS
       #include <stdio.h>

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

       int pclose(FILE *stream);
  • cmdstring:包含shell命令字符串
  • type:
    1. 为”r”时,则文件指针连接到cmdstring的标准输出,也就是代表指向执行shell命令返回的消息,也可以认为链接到stdout;
    2. 为”w”时,则文件指针连接到cmdstring的标准输入,也可以认为链接到stdin
  • 成功返回cmdstring的终止状态;出错返回

无名管道

使用管道来获取执行shell命令返回的信息,一般流程如下:

  1. 创建管道
  2. 使用dup函数复制描述符将shell命令行标准输出绑定到管道的写端
  3. 从管道的读端读取数据
SYNOPSIS
       #include <unistd.h>

       int pipe(int pipefd[2]);

       #define _GNU_SOURCE             /* See feature_test_macros(7) */
       #include <fcntl.h>              /* Obtain O_* constant definitions */
       #include <unistd.h>

       int pipe2(int pipefd[2], int flags);
       
RETURN VALUE
       On success, zero is returned.  On error, -1 is returned, and errno is set appropriately.

参考

https://www.cnblogs.com/clovershell/p/12215253.html

bat中如何获取命令执行后的结果 现在大多数的办公设备都是WIndows,只不过企业中基本上全都在使用win10系统! 有时为了工作的效率提升,可以尝试将那些复杂无用的操作写成bat脚本,让其自己执行! bat中可以糅合各种指令,包括:python,java,shell,adb等等,包括你知道的不知道的! 最近在工作中总是有一个繁琐的操作很是让人头疼: ①将安装包copy至手机指定目录 ②安装APK 于是乎,我想将这... 阅读详情

相关推荐

Shell脚本常用命令及如何通过shell脚本实现服务器上文件的上传下载

Shell 是一个用 C 语言编写的应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 脚本(shell script),是一种为 shell 编写的脚本程序,扩展名为.sh。

longerqingqia22的博客 4339

【Linux】Shell脚本中获取命令运行的结果

shell脚本的时候,常需要将一个命令的运行结果做为参数传递给另外一个命令,除了我们熟知的管道 | args,我们也可以通过获取命令的运行结果

llg___的博客 2万+

linux shell 命令执行结果,如何通过程序执行shell命令获取命令执行结果

1 参考资料1、【c/c++】如何调用【linux】shell命令命令获取命令行的输出内容(https://blog.csdn.net/youngstar70/article/details/70305687)2 使用说明2.1 应用场景最近在实际程序开发中,需要通过程序执行 shell 命令,并获取命令输出内容。但是系统自带的 system 只能返回命令执行成功否,不能捕获命令输出。基于此...

weixin_35606595的博客 3092

linux shell 脚本 获取 执行命令结果

有时候,我们需要在shell脚本中获取执行命令得到的结果。如果只是想知道命令是否正确执行,可以用"$?"标识,如果是想要获得命令执行结果,可以使用`comand`或者"$(command)"或者$(command)   实验脚本dirname.sh: #!/bin/bash echo $0 basedir="$(cd `dirname $0` &amp;&amp; pwd)" echo ...

Man_In_The_Night的博客 2万+

脚本中如何使kill后台进程后不提示Terminated或者信息

在网上找了很多关于kill后台进程后不提示Terminated信息的文章,有好多小伙伴们都说使用 set +m,自己在命令行试了下确实可以,但只是在命令行中有效,在脚本中却不起作用 set +m #通过关闭“监控模式”,使shell终止后台作业后不打印报告。 不起作用的原因 ‘set + m’只是禁用当前shell的作业控制(参见’help set’)。因此,如果您在子shell中输入命令(set + m),则不会影响当前shell的作业控制设置。 解决方法: 第一种方法: set +m kill

IChen.的博客 3687

Linux C 程序执行 shell 命令获取返回结果方法

原文链接:https://blog.csdn.net/luckydarcy/article/details/78669939   据说有统计数据表明,代码的缺陷率是一定的,使用的语言无关。Linux提供了很多的实用工具脚本,在程序中调用工具脚本,无疑可以简化程序,从而降低代码的缺陷数目。Linux shell 脚本也是一个强大的工具,我们可...

Yannie's Blog 4273

Linux C 程序执行shell命令获取返回值结果方法

据说有统计数据表明,代码的缺陷率是一定的,使用的语言无关。Linux提供了很多的实用工具脚本,在程序中调用工具脚本,无疑可以简化程序,从而降低代码的缺陷数目。Linux shell 脚本也是一个强大的工具,我们可以根据需要编制脚本,然后在程序中调用自定义脚本。   《Unix 编程艺术》中有一句话“一行 Shell 脚本胜过万行 C”。那么在 Linux 编程中,C 程序如何调用 shel...

liuzhanchun的博客 9010

Linux下C程序执行shell命令获取返回结果方法

Linux下的C编程有以下几种方法可以执行shell命令 system()函数 exec函数簇 popen()函数 如果还需要获取返回结果,有两种较简单方便的方法 popen()函数 匿名管道 1.system()函数 所需头文件:#include&lt;stdlib.h&gt; 函数原型:int system(const char *cmdstring);            ...

CKX的博客 3万+

linux c编程调用命令获取结果,[转载]Linux下C程序执行shell命令获取返回结果方法...

Linux下的C编程有以下几种方法可以执行shell命令system()函数exec函数簇popen()函数如果还需要获取返回结果,有两种较简单方便的方法popen()函数匿名管道1.system()函数所需头文件:#include函数原型:intsystem(constchar*cmdstring);cmdstring是一个字符指针,就是一个包含需要运行的shell命令的字符串返回值:如果...

weixin_30999575的博客 565

Python通过subprocess模块执行系统命令获取执行结果方法,让你感觉就像使用系统Shell

subprocess模块是官方推荐使用的一个系统函数调用模块,而getoutput方法则是模仿真实的Shell,下面看一下案例 代码(Windows) # -*- coding: UTF-8 -*- import subprocess cmd = 'ipconfig' print(subprocess.getoutput(cmd)) 执行结果(windows) 代码(Linux) # -*- coding: UTF-8 -*- import subprocess cmd = 'ip a | grep M

坐公交也用券 2422

shell 获取命令执行结果_java高并发系列 第31天:获取线程执行结果,这6种方法你都知道?...

这是java高并发系列第31篇。环境:jdk1.8。java高并发系列已经学了不少东西了,本篇文章,我们用前面学的知识来实现一个需求:在一个线程中需要获取其他线程的执行结果,能想到几种方式?各有什么优缺点?结合这个需求,我们使用6种方式,来对之前学过的知识点做一个回顾,加深记忆。方式1:Thread的join()方法实现代码:packagecom.itsoku.chat31;impor...

weixin_39654352的博客 245

关于 在国产麒麟系统上使用QProcess配合管道命令执行shell命令获取预期结果输出失败 的解决方法

在国产麒麟系统上使用QProcess配合管道命令获取输出结果失败的解决方法

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 2万+

Python执行shell命令(并获取执行结果)

执行shell语句 os.system(“xxx”) 可执行shell语句,执行会将结果打印至工作台 执行shell语句并获取结果 os.popen(“xxx”).readlines() 执行获取全部的执行结果获取结果为list,每行内容为list的一个值。需要具体哪一行内容可直接list[0]提取 (推荐使用,其实通过ctrl可以看到popen方法源码底层就是subprocess.Po...

小冯先生的博客 4万+

Linux获取shell执行结果,从Linux程序中执行shell(程序、脚本)并获得输出结果

从Linux程序中执行shell(程序、脚本)并获得输出结果1. 前言2. 使用临时文件3. 使用匿名管道4. 使用popen5. 小结1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作。比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的pi...

weixin_32511247的博客 3274

Python系列之执行shell命令并输出

在Python中执行Shell命令获取结果,通常可以使用subprocess模块。这个模块允许我们启动新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。下面是一个详细的示例,展示了如何使用函数来执行Shell命令获取其输出。

xiaocai 1729
上一篇: ArchLinux安装
下一篇: 一些常用的Shell命令
HideOnLie
博客等级 码龄7年 6粉丝 31原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值