2013-02-06 3 views
0

코드가 아래에 복사됩니다. 나는 당신이 당신의 앱 샌드 박스의 바깥쪽에 쓸 수 있다는 것을 알고 있기 때문에 문서 디렉토리를 사용하고있다. NSFileManager에 의해 생성 된 경로를 확인하기 위해 사용하고 있던 문자열과 비교해도 동일합니다. 너 모두 어떻게 생각하니?iOS에서 열린 상태에서 -1을 얻는 이유는 무엇입니까?

- (NSString *)documentsDirectory 
{ 
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 

    return [paths objectAtIndex:0]; 
} 

- (void) whateverFunction{ 
    NSString *memfileName = @"memmapfile.map"; 

    NSString *filePath = [[self documentsDirectory] stringByAppendingPathComponent:memfileName]; 

    NSLog(@"Here is the filePath: %@", filePath); 

    NSLog(@"Other  version: %s", [[NSFileManager defaultManager] fileSystemRepresentationWithPath:filePath]); 
    int memFD = open([filePath cStringUsingEncoding:NSASCIIStringEncoding], O_RDWR); 
    NSLog(@"I am getting -1 for memFD: %d", memFD); 
} 
+1

'open()'메서드를 붙여 넣을 수 있습니까? 또한 Obj-C 방법을 사용하지 않는 이유는 무엇입니까? – MishieMoo

+1

첫 번째 추측은 파일 경로가 유효하지 않거나 거기에 액세스 할 권한이 없다는 것입니다. –

+0

open 메소드는 POSIX의 메소드입니다. 나는 뭔가를하려고하기 때문에 그것을 사용하고 있습니다. Hot Licks에게 errno를 검사하고 "No such process"문자열에 매핑 된 값 2를 얻습니다. 어떻게 생각해? – user1660675

답변

1

파일이 아직 존재하지 않으므로 열 수 없습니다. 열려있는 플래그에 O_CREAT를 추가하여 존재하지 않을 경우 생성되게하십시오 :

int memFD = open([filePath cStringUsingEncoding:NSASCIIStringEncoding], O_RDWR|O_CREAT); 
+0

그래, 그게 문제 야. 어리석은 감시. – user1660675

관련 문제