linux 将标准输出重定向到本地缓存的实现
2013-04-11 14:55
225 查看
由于功能需要,编写了一个将标准输入保存到本地缓存再进行解析的功能:
int libcli_execute_and_get_output(const char *cmdline, char *buf, size_t size) { int pipefd[2]; if (pipe(pipefd) == -1) { perror("pipe"); return -1; } int tmpout = dup(fileno(stdout)); // 保存stdout,用于恢复 int fd = dup2(pipefd[1], fileno(stdout)); // 将标准输出重定向到pipefd[1],即之后标准输出将写到pipefd[1] if (fd < 0) { return -2; } int ret = libcli_execute(cmdline); // 执行程序,这里会有输出 dup2(tmpout, fileno(stdout));// 恢复stdout close(pipefd[1]);// 关闭输入,N.B.这里必须先关闭才能继续下面的读操作,否则读操作会挂住 char c; int index = 0; while (read(pipefd[0], &c, 1) > 0)// 读吧,保证缓冲区够用 { buf[index++] = c; // 保存到本地缓冲中 if (index >= (size - 1)) break; } buf[index] = '\0'; close(pipefd[0]); return ret; }
相关文章推荐
- linux下通过dup2标准输出重定向查看系统进程方法(也是popen函数实现的方法)
- linux 检测标准输出是否被重定向
- 深入理解虚拟机实战:修改class文件实现System标准输出重定向
- python编写借助linux中的xinetd守护进程实现我们的网络程序(select、重定向标准输入输出)
- unix/linux 下标准输出重定向
- Linux系统教程 标准输入/输出和重定向
- Linux中shell命令实现输出重定向
- linux 重定向 标准错误与标准输出到同一文件
- linux 输出重定向一份到本地文件,屏幕继续输出
- (十)linux下用标准i/o实现格式化输出并且把时间每隔一秒输出到文件中
- Linux 标准 输入 输出 重定向. printf 不输出到屏幕的解决办法
- linux下重定向,把标准输出和错误输出一起同定向到文件
- Linux教程-标准输入/输出和重定向1. 标准输入与输出
- Linux基础(6)标准输入输出与重定向
- linux的标准输入输出和重定向
- Linux教程-标准输入/输出和重定向
- Linux 标准输入输出及重定向
- Linux 标准 输入 输出 重定向. printf 不输出到屏幕的解决办法
- Response_输出数据,实现文件下载,定时刷新页面,是否缓存,重定向,实现验证码
- linux 重定向 标准输入 标准输出 标准错误输出