popen函数详解
- 一、函数介绍
- 二、使用实例
一、函数介绍
头文件 | #include <stdio.h> |
---|---|
函数原型 | FILE *popen(const char *command, const char *type); |
-
功能:
popen()
函数通过先创建一个管道,然后调用 fork 产生一个子进程,让子进程执行shell中的command
命令。popen()
建立的管道会连到子进程的标准输出设备(stdin
)或标准输入设备(stdout
),然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。 -
参数:
command
:要执行的命令。type
:- 如果 type 为
r
,则将子进程的标准输出(stdout
)连接到返回的的文件指针。 - 如果 type 为 w,则将子进程的标准输入(
stdin
)连接到返回的的文件指针。
- 如果 type 为
-
返回值:
调用成功就返回一个文件指针,如果此函数内部在调用fork()
或pipe()
失败,或者不能分配内存将返回NULL
。
头文件 | #include <stdio.h> |
---|---|
函数原型 | int pclose(FILE *stream); |
-
功能:关闭
popen()
函数打开的文件, -
参数:文件指针
-
返回值:调用成功就返回0,否则返回非0。
二、使用实例
在下面的例子中,我们使用 popen()
函数打开一个进程并执行 ls -l
命令,然后将其输出作为文本流读取并打印到屏幕上。最后,我们使用 pclose()
函数关闭进程和文件指针。
#include <stdio.h>
int main()
{
FILE* fp = popen("ls -l", "r");
if (!fp)
{
perror("popen fail: ");
}
char buf[1024];
while (fgets(buf, sizeof(buf), fp) != NULL)
{
printf("%s", buf);
}
pclose(fp);
return 0;
}
执行结果: