管道实例:获取system()调用的buffer
来源:互联网 发布:vb与三菱plc通讯 编辑:程序博客网 时间:2024/06/10 03:01
纠结与system()调用后不能得到其输出到标准控制台的buffer。实现二法:
/*===============================================================* Copyright (C) 2011 All rights reserved.* * 文件名称:system_buf.c* 创 建 者:咼良兵* 创建日期:2011年11月20日* 描 述:** 更新日志:*================================================================*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>static int system_with_buff(const char* cmd, char* buf, int bufsize){ int fd[2] = {0}; int pid = 0; if (pipe(fd) != 0){ fprintf(stderr, "create pipe fail: %s\n", strerror(errno)); return -1; } if ((pid = fork()) == 0){ /*child */ int fd_child[2]; if(pipe(fd_child) != 0){ fprintf(stderr, "create pipe fail: %s\n", strerror(errno)); exit(1); } close(STDOUT_FILENO); dup2(fd_child[1], 1); system(cmd); read(fd_child[0], buf, bufsize); write(fd[1], buf, bufsize); exit(0); } read(fd[0], buf, bufsize); close(fd[0]); close(fd[1]); return 0;}int main(void){#if 1 char buf[20] = {0}; system_with_buff("pwd", buf, 20); printf("ret: %s\n", buf);#endif#if 0 /*如下代码能做到相同的事,他弊端何处? 破坏了些什么? 如何修正*/ char buf[20] = {0}; int fd_child[2]; if(pipe(fd_child) != 0){ fprintf(stderr, "create pipe fail: %s\n", strerror(errno)); exit(1); } close(STDOUT_FILENO); dup2(fd_child[1], 1); system("pwd"); read(fd_child[0], buf, 20); close(fd_child[1]); fprintf(stderr,"ret: %s\n", buf); /*printf("ret: %s\n", buf); */ /*print nothing*/#endif return 0;}
参考:http://www.ibm.com/developerworks/cn/linux/l-ipc/part1/
- 管道实例:获取system()调用的buffer
- 获取system系统调用的输出
- System.Buffer
- System.Buffer
- System.Buffer
- Linux下获取system调用的命令的返回值
- Linux下获取system调用的命令的返回值
- Linux下获取system调用的命令的返回值
- Linux下获取system调用的命令的返回值
- Linux下获取system调用的命令的返回值
- 获取system系统调用的输出-----这种方法不好用
- linux-v0.11中管道的实现之-ring buffer
- Google的protocol buffer的实例
- 管道实例
- 管道实例
- ITopologicalOperator Buffer调用异常的解决方法
- File system buffer
- ffush,system,buffer,fseek
- 开发者创造出Siri第三方服务器
- 用 Hadoop 进行分布式并行编程, 第 1 部分
- Dom解析xml
- remove的用法
- 'nodeName' 为空或不是对象原因
- 管道实例:获取system()调用的buffer
- wince常见问题
- 如何在WinCE平台下开发智能家居应用
- 11月21日
- unique的用法
- 关于条形码的界面显示与打印
- 11.21
- BroadcastReceiver广播机制
- 用 Hadoop 进行分布式并行编程, 第 2 部分