1.3. popen和pclose函数
标准I/O库提供了两个函数popen和pclose。这两个函数实现的操作是:创建一个管道,调用fork产生一个子进程,关闭管道的不使用端,执行一个shell以运行命令,然后等待命令终止。
#include <stdio.h>
FILE * popen(const char *cmdstring, const char *type);
Int pclose(FILE * fp);
函数popen先执行fork,然后调用exec以执行cmdstring,并且返回一个标准I/O文件指针。如果type是"r",则文件指针链接到cmdstring的标准输出;如果type是"w",则文件指针连接到smdstring的标准输入。如果type是"r",则返回的文件指针链是可读的;如果type是"w", 返回的文件指针链是可写的。
函数pclose关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose返回的终止状态与shell已经执行exit(127)一样。
命令cmdstring由Bourne shell以下列方式执行:
sh -c cmdstring
(其中shell的-c选项是告诉shell程序取下一个命令行参数作为命令输入,而不是从标准输入或从一个给定的文件中读命令。)
注意:popen决不能有设置用户ID或设置组ID程序调用。
1.4. 实例-分页程序
shell命令${PAGER:-more}的意思是:如果shell变量PAGER已经定义,且其值非空,则使用其值,否则使用字符串more。