2014-07-20 5 views
0

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 ...)는 다른 파일에 저장해야합니다.

아이디어가 있으십니까? 감사합니다.

+0

질문이 명확하지 않습니다. 일어날 것으로 예상되는 것은 정확히 무엇입니까? 실제로 어떤 일이 벌어지고 있으며, 예상과 다른 점은 무엇입니까? 'stderr '에 대한 쓰기가 동시에 두 개의 파일로가는 것을 예상한다면, 그럴 수는 없습니다. –

+1

이 작업을 수행하려면'NSLog()'를 덤프하고 자체 로깅 프레임 워크를 작성하거나 CocoaLumberjack과 같은 기존 프레임 워크를 사용하십시오. https://github.com/CocoaLumberjack/CocoaLumberjack – trojanfoe

답변

0

왜 이렇게하고 싶은지 불분명합니다. 대신 fprintf을 사용할 수 없습니까? 객체의 경우 AFAIK NSLog은 그냥 쉽게 할 수있는 - (NSString*)description을 호출합니다.

NSLog 그것이 STDERR_FILENO 파일 기술자 (FD)을 기본에 직접 쓰고 가능성이 높습니다 :

에 관계없이, 어떻게 여기 (아마)입니다. dup2 시스템 호출을 사용하여 해당 fd의 대상을 변경할 수 있습니다. 기술자가 중복되기 때문에 파일에 대한 포인터를 유지하지 않아도

FILE *newlogfile = fopen([docFile fileSystemRepresentation], "a+"); 
dup2(fileno(newlogfile), STDERR_FILENO); 
fclose(newlogfile); 

: 당신은 여전히 ​​FILE* 기능을 작동하려면

은 이런 식으로 뭔가를 (검증되지 않은 오류가 필요한 검사) 보이는 . 이전 STDERR_FILENO fd가 자동으로 종료됩니다.

+0

사실'NSLog()'는 [ASL (Apple System Logging) 기능] (https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/asl.3.html). –

+0

@per Johansson 고마워, 내 자신의 기록으로 해결 했어, 지금까지 모든 것을 시도했다. – josef

관련 문제