ToolIO——Android程序的STDOUT和STDER


源码是Flying项目(http://code.google.com/p/flying-on-android/)中的ToolIO.cpp

这个程序主要演示了如何重定向一个程序的STDOUT和STDERR。

Android中由系统启动的进程,默认STDOUT和STDERR是被定向到/dev/null中去的,所以,从adb shell是看不到程序的输出的,只能通过LOGW等打印,然后通过logcat查看。

不过,从shell启动的可执行二进制程序倒是没有被重定向,STDOUT和STDERR都被定向到启动程序时的终端。可以编译运行一下ToolIO:

ToolIO

使用默认的STDOUT和STDERR。可以看到所有输出。

ToolIO console

把STDOUT和STDERR重定向到/dev/console。输出效果和重定向前一样。

ToolIO null

把STDOUT和STDERR重定向到/dev/null。重定向后看不到任何输出。

 

这说明,通过串口从SHELL启动ToolIO时,程序的STDOUT和STDERR和ToolIO一样,都是/dev/console,所以重定向到/dev/console时,输出没有什么改变。

Android源码中有很多printf,但这些输出在串口是看不到的, 因为这些源码编出的程序并没有通过串口启动。

另外,Android的bionic中stderr默认是没有缓冲的,而stdout是有缓冲的。有缓冲,写到stdout中的字符会被积累起来,直到堆满缓冲区或者遇到/n才会把所有内容一次打印出来。

 


你可能感兴趣的:(android,shell,null,终端)