popen
来源:互联网 发布:我想在淘宝上做代理商 编辑:程序博客网 时间:2024/04/30 11:08
#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
函数说明
popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose()函数关闭,而不是fclose()函数。pclose()函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose()返回的终止状态与shell已执行exit一样。
type参数只能是读或者写中的一种,得到的返回值(标准I/O流)也具有和type相应的只读或只写类型。如果type是"r"则文件指针连接到command的标准输出;如果type是"w"则文件指针连接到command的标准输入。
command参数是一个指向以NULL结束的shell命令字符串的指针。这行命令将被传到bin/sh并使用-c标志,shell将执行这个命令。
popen()的返回值是个标准I/O流,必须由pclose来终止。前面提到这个流是单向的(只能用于读或写)。向这个流写内容相当于写入该命令的标准输入,命令的标准输出和调用popen()的进程相同;与之相反的,从流中读数据相当于读取命令的标准输出,命令的标准输入和调用popen()的进程相同。
返回值
如果调用fork()或pipe()失败,或者不能分配内存将返回NULL,否则返回标准I/O流。popen()没有为内存分配失败设置errno值。如果调用fork()或pipe()时出现错误,errno被设为相应的错误类型。如果type参数不合法,errno将返回EINVAL。
/***********************************将目录下.jpg文件打印到屏幕上为.png***********************************/#include <stdio.h>#include <string.h>char buf[1024];int main(void){FILE *pp = popen("ls", "r");while(fgets(buf, 1024, pp)){char *s;if( (s = strstr(buf, ".jpg")) ){*s = '\0';//取出指针s的内容即:. printf("%s.png\n", buf);}}pclose(pp);return 0;}/*$ ./a.out 1.png2.pnga.png$ ls1.jpg 2.jpg a.jpg a.out popen_mv.c pop_name2.c*/<pre name="code" class="cpp">/***********************************将目录下.jpg文件修改为.png***********************************/#include <stdio.h>#include <stdlib.h>#include <string.h>char buf[1024];int main(void){FILE *pp = popen("ls", "r");while(fgets(buf, 1024, pp)){char *s;if( (s = strstr(buf, ".jpg")) ){char str_mv[1024] = "mv ";if(buf[strlen(buf) - 1] == '\n'){buf[strlen(buf) - 1] = '\0';}strcat(str_mv, buf);//mv 1.jpg无空格 (以文件1.jpg为例)strcat(str_mv, " "); //mv 1.jpg空格*s = '\0';//取出指针s的内容即:. strcat(buf, ".png"); //buf里为1.pngstrcat(str_mv, buf);//mv 1.jpg 1.pngprintf("%s\n", str_mv);system(str_mv);}}pclose(pp);return 0;}/*$ ls1.jpg 2.jpg a.jpg a.out$ ./a.out mv 1.jpg 1.pngmv 2.jpg 2.pngmv a.jpg a.png*/
0 0
- popen()
- popen()
- popen()
- popen
- popen
- popen
- popen
- popen()
- popen 函数
- popen函数
- popen函数
- popen()函数
- os.popen
- 管道-popen
- popen函数
- 函数popen()
- Popen函数
- popen函数
- 修改目录里面的.jpg结尾的文件改为.png (pid system fgets fork)
- 你的第一本哲学书 -- 8、死亡 ---- 托马斯·内格尔
- 嵌入式 关于sqlite多线程编程相关小结
- Linux 可执行文件 ELF结构 及程序加载运行
- 你的第一本哲学书 -- 9、生活的意义 ---- 托马斯·内格尔
- popen
- java.io.BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
- 用键盘钩子截获键盘消息,后台监控键盘输入
- 自己写的手机端轮播插件-- hdpslide.js
- 面试题22 已知压入序列 判断弹出序列正不正确
- unity打包模型存在的一个问题
- PAT 1087. All Roads Lead to Rome
- DP PKU 1754
- JavaScript实现联想校招员工信息展示