2014-12-15 4 views
4

C의 동등한 기능 :어떻게 목표 C에서 chmod를()를 수행하는

chmod(MY_FILE, 0777); 

목표 C에서가? 수행하지 않고 기존의 잠긴 파일에 쓰려고합니다.

chmod +x MY_FILE 

터미널에 있습니다.

+5

Objective-C는 C의 수퍼 세트입니다. iOS/OSX에서 실행할 수있는 모든 C 코드는 objective-c 파일에 붙여 넣기 만하면 작동합니다. – Linuxios

+1

@Linuxios, 아마도'int NSArray;'를 제외하면 – paxdiablo

+0

@paxdiablo : True. – Linuxios

답변

3

C의 chmod()을 사용할 수 있습니다.

설명서 및 관련 기능을 보려면 터미널에 man 2 chmod을 입력하십시오.

+0

IMHO, @newbieMACUser는 C 방식이 아니라 ObjC 방식을 요청했으며 C 방식은 라이브러리가 포함되도록 요구합니다. ObjC를 사용하면 [Amin Negm-Awad의 대답] (http://stackoverflow.com/a/27478061/105539)이 더 적합하며 기본 Objective C 파일로 얻는 표준 기초 자료보다 더 많은 추가 기능이 필요하지 않습니다. – Volomike

-1

코코아를 사용하면됩니다.

NSTask *changePerms = [[NSTask alloc] init]; 
[changePerms setLaunchPath:@"/bin/chmod"]; 
NSArray *chmodArgs = [NSArray arrayWithObjects:@"666", @"/Users/abc/hello.txt", nil]; 
[changePerms setArguments:chmodArgs]; 
[changePerms launch]; 

는이 시스템을 사용 NSFileManager를 클래스

NSDictionary* attr = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithShort:0766], NSFilePosixPermissions, NULL]; 

NSError *error = nil; 
[[NSFileManager defaultManager] setAttributes:attr ofItemAtPath:@"/Users/abc/Desktop/test.txt" error:&error]; 

를 사용하여 다른 방법으로()이 도움이

system("chmod 777 /Users/abc/Desktop/test.txt"); 

희망 전화입니다!

+2

첫 번째 코드 스 니펫은 _awful_입니다. 'chmod()'가 즉시 사용 가능할 때 외부 명령으로 포설하는 것은 정말로 제로 포인트입니다. – nneonneo

+0

원시 C 코드를 사용하거나 프레임 워크 API에 의존하십시오. 필자가 제시 한 두 옵션 모두 프레임 워크를 사용하고 있습니다. –

+0

chmod가 훨씬 더 큰 값을 처리 할 수 ​​있기 때문에'[NSNumber numberWithUnsignedLong : ___]'을 사용하는 것이 더 나을 것입니다. 증명을 위해서, 파일에'chmod u + s'를 실행 한 다음'stat -r'을 실행하고 세번째 매개 변수를 봅니다. (적어도 내 Mac에서는 3 번째입니다.) 서명 된 short가 보유 할 수있는 수보다 큰 수인 32768이고, 부호없는 short가 보유 할 수있는 수는 65535입니다. chmod와 동일한 수를 다른 테스트 파일을 보면 chmod가이 부호없는 long 값을 허용한다는 것을 알 수 있습니다. – Volomike

5

코코아의 -setAttributes:ofItemAtPath:error:을 사용하면이 작업을 수행 할 수 있습니다.

[[NSFileManager defaultManager] setAttributes:@{ NSFilePosixPermissions : @0666 } 
           ofItemAtPath:… 
             error:&error]; 

물론 권한이 필요합니다.