popen 和 pclose 库函数实现的操作:创建一个管道,调用fork产生一个子进程,关闭管道的不使用端,执行一个shell命令,然后等待命令终止。
#include
//成功返回文件指针,失败返回-1
FILE *popen(const char *cmdstring, const char *type);
//返回cmdstring的终止状态,出错返回-1
int pclose(FILE *fp);
popen先执行fork, 然后调用exec以执行cmdstring, 并且返回一个标准I/O文件指针。如果type是“r”,则文件指针链接到cmdstring的标准输出;如果type是“w”,则文件指针链接到cmdstring的标准输入。
//成功返回buf, 否则返回NULL
char *fgets(char *restrict buf, int n, FILE *restrict fp);
//成功返回非负值,出错返回EOF
int fputs(const char *restrict str, FILE *restrict fp);
例:
- #include <stdio.h>
-
-
int
-
main(int argc, char **argv)
-
{
-
(void)argc;
-
(void)argv;
-
-
char buf[2048];
-
FILE *fp = popen("ls", "r");
-
if (NULL == fp) {
-
printf("ls error\n");
-
}
-
-
while (fgets(buf, 2048, fp) != NULL) {
-
if (fputs(buf, stdout) == EOF) {
-
printf("over\n");
-
}
-
}
-
-
if (pclose(fp) == -1 ) {
-
printf("pclose error\n");
-
}
-
-
return 0;
-
}
阅读(3784) | 评论(0) | 转发(0) |