popen 使用方法
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 使用方法相关推荐
- popen使用方法及场景
1. popen的应用场景 popen应用于执行shell命令,并读取此命令的返值,或者与执行的命令进行交互. 2. popen的实现 popen()函数通过创建一个管道,调用fork()产生一个子进 ...
- python执行系统命令的方法_python执行系统命令的方法 :os.system(),subprocess.popen(),command...
最近接触到os.system(),subprocess.popen()和commands来执行系统命令,从网上搜索到许多,现整理如下. 1. 使用os.system("cmd") ...
- python os system用法_Python调用系统命令os.system()和os.popen()的实现
作为一门脚本语言,写脚本时执行系统命令可以说很常见了,python提供了相关的模块和方法. os模块提供了访问操作系统服务的功能,由于涉及到操作系统,它包含的内容比较多,这里只说system和pope ...
- python使用教程cmd啥意思-对python中执行DOS命令的3种方法总结
1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在Linux上执行的信息. import os os.system("ls") 2. ...
- python cmd命令大全-详解python调用cmd命令三种方法
目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...
- python linux命令-Python执行Linux系统命令的4种方法
(1) os.system 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 system(command) -> exit_status Execute the command ( ...
- python 调用linux命令-Python执行Linux系统命令的4种方法
(1) os.system 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 复制代码代码如下: system(command) -> exit_status Execute the ...
- python调用Shell脚本:os.system(cmd)或os.popen(cmd),
python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容.实际使用时视需求情况而选择. ...
- 3种python调用其他脚本的方法,你还知道其他的方法吗?
1.用python调用python脚本 #!/usr/local/bin/python3.7 import time import oscount = 0 str = ('python b.py') ...
最新文章
- mysql数据库的打开失败_MySQL数据库启动失败解决
- php 字典 枚举,秒爆十万字典:奇葩技巧快速枚举“一句话后门”密码
- Linux下查看在运行进程的命令
- 吴恩达 coursera ML 第八课总结+作业答案
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #15 ramzswap
- [Prodinner项目]学习分享_第二部分_Entity到DB表的映射
- arraylist扩容是创建新数组吗 java_Java ArrayList扩容问题实例详解
- Redis之数据结构和底层编码
- java中异常抛出后代码还会继续执行吗
- Java抽象类(Abstract Class)与接口(Interface)区别
- 「爬虫入门」拒绝跟热点搞python,直接在浏览器里体验『第一次』,理解原理=>如鱼得水
- helloworld代码_十年架构师教你用最简单的代码实现Java基础编程—Hello World!
- (1)快速了解Redis
- 计算机毕业设计ssm基于vue的健康餐饮管理系统的设计与实现
- 黑龙江等保测评机构项目测评收费价格标准参考
- 圣诞礼物送什么 荣耀畅玩5为你排忧解难
- WLT8016:BLE蓝牙的一些基本概念
- python基础试题(1)
- 昭阳K4e-IIL 81Y2CTO1WW 键盘按键失灵 实际是主板故障
- oracle将其他字段类型改为clob类型方法