Попытка использовать freopen, но для двух разных файлов
Я пытаюсь использовать 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...) должен быть сохранен в другом файле.
Любая идея? Спасибо
1 ответ
Непонятно, почему вы хотите сделать это таким образом. Вы не можете просто использовать fprintf
вместо? Для объектов AFAIK NSLog
просто звонки - (NSString*)description
что вы можете сделать сами так же легко.
Несмотря на это, вот (вероятно) как:
NSLog
скорее всего, он пишет непосредственно в основной STDERR_FILENO
дескриптор файла (fd). Вы можете изменить цель этого fd, используя dup2
системный вызов.
Если вы все еще хотите работать с FILE*
функции это выглядит примерно так (не проверено, требуется проверка ошибок):
FILE *newlogfile = fopen([docFile fileSystemRepresentation], "a+");
dup2(fileno(newlogfile), STDERR_FILENO);
fclose(newlogfile);
Вам не нужно хранить указатель на файл, потому что дескриптор дублирован. Старый STDERR_FILENO
ФД закрывается автоматически.