在Objective C中捕获stdout

时间:2016-04-21 07:07:48

标签: ios objective-c c stdout nslog

我在Objective C中使用C,我想从Console中捕获stdoutUIView。 以下是我要说的话:

print(stdout, v=toplevel_eval(v));

1 个答案:

答案 0 :(得分:0)

除了你用C语写作之外,我不知道你对C,“Unix”和Cocoa I / O有多了解 - 所以你可能已经知道了一些。

这是一个可能的解决方案,它看起来比它复杂。

读:

  • 您需要了解系统调用pipedup2read
  • 您需要了解GCD函数dispatch_async以及如何获取GCD队列。
  • pipedup2通常与forkexec一起使用,以启动进程并对该进程标准输入/输出进行写入/读取。你将要做的是使用一些相同的基本思想,所以查找这个常见模式的例子将有助于你理解这些调用是如何工作的。以下是大学的一些说明:Pipe, Fork, Exec and Related Topics

概要

使用dispatch_async计划一个块来处理数据的读写。该块将:

  1. 使用pipe创建管道和dup2连接标准输出 - 文件描述符1 - 它。
  2. 输入一个循环,使用read从管道获取可用数据。数据读取将采用字节数组。
  3. 在循环内将读取的字节转换为NSString
  4. 在循环中将该字符串附加到您的视图中 - 您必须在主线程上执行此操作,因为它涉及UI,您可以使用另一个dispatch_async指定主队列来执行此操作
  5. 就是这样。现在,您的块将在后台同时执行,读取C代码写入标准输出并将其添加到视图中。

    如果您遇到困难,可以提出一个新问题,显示您编写的代码并说明哪些代码无效。

    HTH