stdout和stderr
我们知道iOS上的日志打印函数有printf和NSLog两种,其中printf
对应标准输出stdout
,NSLog
对应标准错误stderr
。
在默认情况下,stdout
是行缓冲的,他的输出会放在一个buffer里面,只有到换行的时候,才会输出到屏幕。而stderr
是无缓冲的,会直接输出。举例来说就是fprintf(stdout, "xxxx")
和 fprintf(stdout, "xxxx\n")
,前者不会立即输出,直到遇到新行才会一起输出。而fprintf(stderr, "xxxxx")
,不管有没有\n都输出。这也是为什么使用NSLog
不需要在最后添加\n的原因。
输出重定向
在iOS上,Debug时stdout
和stderr
默认都是直接输出到Console, 非Debug时会保存在Systemlog里面。
|
|
以上是 stdout
和 stderr
在iOS中的定义,FILE
这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行。其中_file是文件描述符,stdout
和stderr
的文件描述符已经在系统中定义:
|
输出到文件
使用freopen
函数将输出重定向到文件。freopen详细介绍可见http://www.cplusplus.com/reference/cstdio/freopen/
具体实现如下:
|
|
输出到UITextView
1、通过NSPipe创建一个管道,pipe有读端和写端。
2、通过dup2将标准输入重定向到pipe的写端。
3、通过NSFileHandle监听pipe的读端,然后将读出的信息显示在UITextview上。
具体实现如下:
|
|
本文作者: ctinusdev
本文链接: https://ctinusdev.github.io/2016/04/01/PrintRedirect/
转载请注明出处!