Linux popen/pclose

popen() 函数

#include <stdio.h>
FILE * popen(const char *command , const char *type );
int pclose(FILE *stream);

用创建管道的方式启动一个进程,并调用shell.

因为管道是被定义成单向的,所以type参数只能定义成只读或者只写,不能是两者同时,结果流也相应的是只读或者只写.

command 参数是一个字符串指针, 指向的是一个以null结束符结尾的字符串, 这个字符串包含一个shell命令. 这个命令被送到/bin/sh以-c参数执行, 即由shell来执行. type参数也是一个指向以null结束符结尾的字符串的指针, 这个字符串必须是 "r" 或者 "w" 来指明是读还是写.

popen()函数的返回值是一个普通的标准I/O流, 它只能用pclose()函数来关闭, 而不是fclose()函数,向这个流的写入被转化为对command 命令的标准输入; 而command命令的标准输出则是和调用popen()函数的进程相同,除非这个被command命令自己改变.

相反的,读取一个"被popen了的"流,就相当于读取command命令的标准输出,而command的标准输入则是和调用popen,函数的进程相同.

注意,popen 函数的输出流默认是被全缓冲的.

pclose 函数

等待相关的进程结束并返回一个 command命令的退出状态

PS:

FILE* stream;

char Buffer[1024];

//将"ls-l"的输出存放到Buffer.

popen("ls-l","r");

fread(Buffer,sizeof(char),sizeof(Buffer));

//将内核log存放到Buffer.

//popen("cat /proc/kmsg","r");

fread(Buffer,sizeof(char),sizeof(Buffer));

//For example:

原文地址:https://www.cnblogs.com/AlwaysOnLines/p/5585325.html