popen 子例程

用途

启动到进程的管道。

标准 C 库 (libc.a)

语法

#include <stdio.h>

FILE *popen ( Command,  Type)
const char *Command, *Type;

描述

popen 子例程在调用程序和要执行的 shell 命令之间创建管道。

注: popen 子例程仅运行 sh shell 命令。 如果 Command 参数不是有效的 sh shell 命令,那么结果不可预测。 如果终端处于可信状态,那么将运行 tsh shell 命令。

如果先前对 popen 子例程的调用所打开的流在父进程中保持打开状态,那么 popen 子例程将在子进程中关闭这些流。

popen 子例程返回指向流的 FILE 结构的指针。

注意: 如果原始进程和使用 popen 子例程启动的进程同时读取或写入公共文件,那么这两个进程都不应使用缓冲 I/O。 如果这样做,那么结果是不可预测的。

通过使用 fflush 子例程清空缓冲区,可以防止输出过滤器出现一些问题。

参数

表 1. 参数
描述
命令 指向包含 shell 命令行的以 null 结束的字符串。
TYPE 指向包含 I/O 方式的以 null 结束的字符串。 如果 Type 参数是值 r,那么可以通过读取文件 Stream从命令的标准输出进行读取。 如果 Type 参数是值 w,那么可以通过写入文件 Stream来写入命令的标准输入。

由于打开的文件是共享的,因此类型 r 命令可用作输入过滤器,类型 w 命令可用作输出过滤器。

返回值

如果无法创建文件或进程,或者无法访问 shell ,那么 popen 子例程将返回空指针。

错误代码

如果 Type 参数无效,那么 popen 子例程会设置 EINVAL 变量。 popen 子例程还可以设置 errno 全局变量,如 forkpipe 子例程所述。