Chinaunix首页 | 论坛 | 博客
  • 博客访问: 790307
  • 博文数量: 296
  • 博客积分: 5376
  • 博客等级: 大校
  • 技术积分: 2298
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-14 19:02
文章分类

全部博文(296)

文章存档

2023年(2)

2020年(2)

2018年(2)

2017年(26)

2016年(4)

2015年(19)

2014年(12)

2013年(26)

2012年(84)

2011年(50)

2010年(41)

2009年(28)

分类: 嵌入式

2012-06-17 16:11:11

关于如何使用logwrapper,请参考下面这篇文章:使用logwrapper调试Android程序(http://hi.baidu.com/snownight/blog/item/91d55edfa2dc1f0149540399.html)

我这里描述一下logwrapper的原理,看logwrapper是如何利用伪终端机制来监视一个进程的STDOUT和STDERR。

伪终端是由主终端和从终端这两个构成的。

一、logwrapper打开主终端

parent_ptty = open("/dev/ptmx", O_RDWR);

二、获取从终端的名字

child_devname = (char*)ptsname(parent_ptty)

三、fork子进程,然后在子进程中打开从终端:

child_ptty = open(child_devname, O_RDWR);

接下来,把子进程的STDOUT和STDERR重定向到从终端

dup2(child_ptty, 1);

dup2(child_ptty, 2);

最后,调用child函数运行程序

child(argc - 1, &argv[1]);

四、父进程最后调用parent()函数并进入循环读取主终端中的数据(即,子进程的程序向从终端输出的数据)并存放在char buffer[4096]中。当子进程的输出数据填满buffer时,父进程会向/dev/log/*下面的设备flush一次。子进程执行完毕后再flush一次,最后打印出子进程终止的信息。

 

http://blog.csdn.net/a345017062/article/details/6435337

阅读(745) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~