Xcode 尝试使用freopen,但用于两个不同的文件

Xcode 尝试使用freopen,但用于两个不同的文件,xcode,nslog,freopen,Xcode,Nslog,Freopen,我正在尝试使用freopen()打印到两个不同的文件。 可能吗 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDir = [paths objectAtIndex: 0]; NSString *docFile = [docDir stringByAppendingPathComponent: @"sensordata.tx

我正在尝试使用
freopen()
打印到两个不同的文件。 可能吗

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex: 0];
NSString *docFile = [docDir stringByAppendingPathComponent: @"sensordata.txt"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:docDir])
{
    [fileManager createFileAtPath:docFile contents:nil
                                   attributes:nil];
}
freopen([docFile cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
NSLog(@"GyroData: %f %f %f ",gyroData.rotationRate.x, gyroData.rotationRate.y, gyroData.rotationRate.z);


NSLog(@"DeviceMotion: %f  ",magnitude);
第二个NSLog(DeviceMotion…)应保存在另一个文件中

有什么想法吗?
谢谢

不清楚您为什么要这样做。你就不能用
fprintf
来代替吗?对于对象AFAIK
NSLog
只需调用
-(NSString*)description
,您可以自己轻松地完成

无论如何,以下(可能)是如何:

NSLog
很可能是直接写入底层的
STDERR\u FILENO
文件描述符(fd)。您可以使用
dup2
系统调用更改该fd的目标

如果您仍然想使用
文件*
函数,它看起来是这样的(未测试,需要进行错误检查):


您不必保留指向文件的指针,因为描述符是重复的。旧的
STDERR\u文件no
fd将自动关闭。

您的问题不清楚。你到底希望发生什么?实际发生了什么,与您的预期有什么不同?如果您希望写入
stderr
会同时写入两个文件,那么,不,这是不可能的。如果您想这样做,请转储
NSLog()
,或者编写您自己的日志框架,或者使用现有的框架,例如CocoaLumberjack:实际上,
NSLog()
使用了。@per Johansson非常感谢,我用自己的日志解决了这个问题,我一直在尝试所有的事情。
FILE *newlogfile = fopen([docFile fileSystemRepresentation], "a+");
dup2(fileno(newlogfile), STDERR_FILENO);
fclose(newlogfile);