Попытка использовать 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 ФД закрывается автоматически.

Другие вопросы по тегам