我试图为 iphone 制作一个 java 解释器,但是我使用的库只将控制台输出打印到 NSLog/printf 控制台。我希望它返回一个 std::string,我可以将其转换为 NSString 并显示在 UITextView 中。以前有这样做过吗?捕获控制台日志(它需要被应用商店接受)或更改源添加方法以返回带有缓冲区的字符串。
问问题
142 次
1 回答
1
C 标准输入和输出库是你的朋友。
您应该知道到 stderr 和 printf 的 NSLog 输出使用 stdout。因此,根据您的需要,如果您需要所有输出,您可以只重定向一个或两个。
假设我们将所有流写入一个文件(在我们的示例中为 stdout 和 sdterr 中的两个),然后当我们完成后关闭文件,然后您可以简单地使用保存在文档目录中的文件来显示它们。
// get user directory
NSArray *allPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDIR = [allPaths objectAtIndex:0];
NSString *pathForLog = [documentsDIR stringByAppendingPathComponent:@"logFile.txt"];
NSString *pathForError = [documentsDIR stringByAppendingPathComponent:@"errorFile.txt"];
// redirect the stream
freopen([pathForError cStringUsingEncoding:NSASCIIStringEncoding],"w", stderr); // NSLog
freopen([pathForLog cStringUsingEncoding:NSASCIIStringEncoding], "w", stdout); // printf
// your log stuff
printf("i am a robot\n");
NSLog(@"And i do bip bipbip biiiip");
// when you are done, close the stream
fclose (stdout);
fclose (stderr);
// and retrieve your data, as NSString object (or whatever you want)
NSString* dataLog = [NSString stringWithContentsOfFile: pathForLog
encoding: NSASCIIStringEncoding
error: nil];
NSString* errorLog = [NSString stringWithContentsOfFile: pathForError
encoding: NSASCIIStringEncoding
error: nil];
于 2013-03-22T09:54:41.013 回答