gpt4 book ai didi

objective-c - Objective C 将标准输出打印到 UIAlertView

转载 作者:行者123 更新时间:2023-11-28 18:13:06 24 4
gpt4 key购买 nike

我有一个使用 fprintf 打印到标准输出的 C 函数,我试图在 UIAlertView 中显示标准输出的内容。我的代码如下:

NSFileHandle *stdoutFileHandle = [NSFileHandle fileHandleWithStandardOutput];
NSData *stdoutData = [stdoutFileHandle availableData];
NSString *stdoutString = [[NSString alloc] initWithData:stdoutData encoding:NSASCIIStringEncoding];

UIAlertView *stdoutAlert = [[UIAlertView alloc] initWithTitle:@"STDOUT OUTPUT" message:stdoutString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[stdoutAlert show];

我在运行代码时遇到以下错误。

由于未捕获的异常“NSFileHandleOperationException”而终止应用程序,原因:“[NSConcreteFileHandle availableData]:错误的文件描述符”

当我将 [stdoutFileHandle availableData] 替换为 [stdoutFileHandle readDataToEndOfFile] 时,我得到了一个等效的错误。

最佳答案

问题是您正在从输出流中读取。要完成这项工作,您需要欺骗 stdout 将其内容写入输入流而不是控制台。

我知道执行此操作的旧 C 方法,但您不会喜欢它。这使用 pipe () 和 dup2 ().

int pipefd[2];

pipe(pipefd);
dup2(pipefd[1], STDOUT_FILENO);
close(pipefd[1]);

此时,pipefd[0] 可以读取任何写入 stdout 的内容。此时,您可以使用 -initWithFileDescriptor:pipefd[0] 中读取。

NSFileHandle *stdoutReader = [[NSFileHandle alloc] initWithFileDescriptor:pipefd[0]];

请注意,您需要进行大量的错误检查。希望对您有所帮助。

关于objective-c - Objective C 将标准输出打印到 UIAlertView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12232203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com