popen 子例程
用途
启动到进程的管道。
库
标准 C 库 (libc.a)
语法
描述
popen 子例程在调用程序和要执行的 shell 命令之间创建管道。
注: popen 子例程仅运行 sh shell 命令。 如果 Command 参数不是有效的 sh shell 命令,那么结果不可预测。 如果终端处于可信状态,那么将运行 tsh shell 命令。
如果先前对 popen 子例程的调用所打开的流在父进程中保持打开状态,那么 popen 子例程将在子进程中关闭这些流。
popen 子例程返回指向流的 FILE 结构的指针。
注意: 如果原始进程和使用 popen 子例程启动的进程同时读取或写入公共文件,那么这两个进程都不应使用缓冲 I/O。 如果这样做,那么结果是不可预测的。
通过使用 fflush 子例程清空缓冲区,可以防止输出过滤器出现一些问题。
参数
| 项 | 描述 |
|---|---|
| 命令 | 指向包含 shell 命令行的以 null 结束的字符串。 |
| TYPE | 指向包含 I/O 方式的以 null 结束的字符串。 如果 Type 参数是值 r,那么可以通过读取文件 Stream从命令的标准输出进行读取。 如果 Type 参数是值 w,那么可以通过写入文件 Stream来写入命令的标准输入。 由于打开的文件是共享的,因此类型 r 命令可用作输入过滤器,类型 w 命令可用作输出过滤器。 |
返回值
如果无法创建文件或进程,或者无法访问 shell ,那么 popen 子例程将返回空指针。
错误代码
如果 Type 参数无效,那么 popen 子例程会设置 EINVAL 变量。 popen 子例程还可以设置 errno 全局变量,如 fork 或 pipe 子例程所述。