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/
转载请注明出处!