popen()可以执行shell命令,并读取此命令的返回值;  

popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。可以通过这个管道执行标准输入输出操作。这个管道必须由pclose()函数关闭,必须由pclose()函数关闭,必须由pclose()函数关闭,而不是fclose()函数(若使用fclose则会产生僵尸进程)。pclose()函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose()返回的终止状态与shell已执行exit一样。

 type参数只能是读或者写中的一种,得到的返回值(标准I/O流)也具有和type相应的只读或只写类型。如果type是"r"则文件指针连接到command的标准输出;如果type是"w"则文件指针连接到command的标准输入。

  command参数是一个指向以NULL结束的shell命令字符串的指针。这行命令将被传到bin/sh并使用-c标志,shell将执行这个命令。

  popen()的返回值是个标准I/O流,必须由pclose来终止。前面提到这个流是单向的(只能用于读或写)。向这个流写内容相当于写入该命令的标准输入,命令的标准输出和调用popen()的进程相同;与之相反的,从流中读数据相当于读取命令的标准输出,命令的标准输入和调用popen()的进程相同。

返回值

  如果调用fork()或pipe()失败,或者不能分配内存将返回NULL,否则返回标准I/O流。popen()没有为内存分配失败设置errno值。如果调用fork()或pipe()时出现错误,errno被设为相应的错误类型。如果type参数不合法,errno将返回EINVAL。

函数原型

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

例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>void
print_result(FILE *fp)
{char buf[100];if(!fp) {return;}printf("\n>>>\n");while(memset(buf, 0, sizeof(buf)), fgets(buf, sizeof(buf) - 1, fp) != 0 ) {printf("%s", buf);}printf("\n<<<\n");
}int
main(void)
{FILE *fp = NULL;while(1) {fp = NULL;fp = popen("ls", "r");if(!fp) {perror("popen");exit(EXIT_FAILURE);}print_result(fp);pclose(fp);sleep(1);}
}

popen 使用方法相关推荐

  1. popen使用方法及场景

    1. popen的应用场景 popen应用于执行shell命令,并读取此命令的返值,或者与执行的命令进行交互. 2. popen的实现 popen()函数通过创建一个管道,调用fork()产生一个子进 ...

  2. python执行系统命令的方法_python执行系统命令的方法 :os.system(),subprocess.popen(),command...

    最近接触到os.system(),subprocess.popen()和commands来执行系统命令,从网上搜索到许多,现整理如下. 1. 使用os.system("cmd") ...

  3. python os system用法_Python调用系统命令os.system()和os.popen()的实现

    作为一门脚本语言,写脚本时执行系统命令可以说很常见了,python提供了相关的模块和方法. os模块提供了访问操作系统服务的功能,由于涉及到操作系统,它包含的内容比较多,这里只说system和pope ...

  4. python使用教程cmd啥意思-对python中执行DOS命令的3种方法总结

    1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在Linux上执行的信息. import os os.system("ls") 2. ...

  5. python cmd命令大全-详解python调用cmd命令三种方法

    目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...

  6. python linux命令-Python执行Linux系统命令的4种方法

    (1) os.system 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 system(command) -> exit_status Execute the command ( ...

  7. python 调用linux命令-Python执行Linux系统命令的4种方法

    (1) os.system 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 复制代码代码如下: system(command) -> exit_status Execute the ...

  8. python调用Shell脚本:os.system(cmd)或os.popen(cmd),

    python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容.实际使用时视需求情况而选择. ...

  9. 3种python调用其他脚本的方法,你还知道其他的方法吗?

    1.用python调用python脚本 #!/usr/local/bin/python3.7 import time import oscount = 0 str = ('python b.py') ...

最新文章

  1. mysql数据库的打开失败_MySQL数据库启动失败解决
  2. php 字典 枚举,秒爆十万字典:奇葩技巧快速枚举“一句话后门”密码
  3. Linux下查看在运行进程的命令
  4. 吴恩达 coursera ML 第八课总结+作业答案
  5. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #15 ramzswap
  6. [Prodinner项目]学习分享_第二部分_Entity到DB表的映射
  7. arraylist扩容是创建新数组吗 java_Java ArrayList扩容问题实例详解
  8. Redis之数据结构和底层编码
  9. java中异常抛出后代码还会继续执行吗
  10. Java抽象类(Abstract Class)与接口(Interface)区别
  11. 「爬虫入门」拒绝跟热点搞python,直接在浏览器里体验『第一次』,理解原理=>如鱼得水
  12. helloworld代码_十年架构师教你用最简单的代码实现Java基础编程—Hello World!
  13. (1)快速了解Redis
  14. 计算机毕业设计ssm基于vue的健康餐饮管理系统的设计与实现
  15. 黑龙江等保测评机构项目测评收费价格标准参考
  16. 圣诞礼物送什么 荣耀畅玩5为你排忧解难
  17. WLT8016:BLE蓝牙的一些基本概念
  18. python基础试题(1)
  19. 昭阳K4e-IIL 81Y2CTO1WW 键盘按键失灵 实际是主板故障
  20. oracle将其他字段类型改为clob类型方法

热门文章

  1. Hadoop读书笔记(1)
  2. 金融培训直播的优势有哪些?
  3. Windows Service编程
  4. js 渲染十万条数据卡顿优化方法。请求帧渲染
  5. unity制作qq炫舞的核心玩法
  6. Updating -- Python知识
  7. VAO, VBO, EBO的创建顺序和解绑顺序
  8. 怎样能对众人演讲讲话不紧张怯场
  9. 程序设计思维与实践 Week9 作业 (3/4/数据班)
  10. oracle utc时间转化,UTC时间和本地时间的转换