2013-11-21 2 views
1

타사 도구에서 제공되는 일부 파일을 디렉토리에서 읽고 싶습니다. 그 파일을 읽기 전에 그 파일이 regular file인지 확인하고 있습니다.수퍼 유저가 아닌 파일 사용 권한 변경

내가 다시하고 다시 읽을 수 있도록`의 권한을 변경하려면이 파일을 읽은 후 bofore 독서

if (!S_ISREG(file_info.st_mode)) 
{ 
    return false; 
} 

.

내 질문은 파일 권한을 st_mode으로 어떻게 변경하여 내 응용 프로그램이 수퍼 유저가 아니더라도 다시 읽지 않도록 할 수있는 방법입니다.

내 리눅스 배포판은, 그것이 일반 파일 인 경우 테스트 안, 레드햇

+1

파일의 소유자는 누구입니까? – hek2mgl

+0

타사 도구에서 이러한 파일이 생성됩니다. 나는 단지 파일을 읽었을 뿐이다. 나는 그 파일의 소유자가 아니다. – user2845185

+0

도구가 파일을 소유하지 않습니다. 파일은 사용자가 소유하고 있습니다 ... 그래서 질문은 "어떤 도구로 실행중인 도구입니까?"가됩니다. @ hek2mgl은 다음과 같은 결과를 낳습니다. 소유권이 없으면 루트 사용자가 아닌 한 변경할 수 없습니다. – mah

답변

2

파일을 읽고 다시 읽고 싶어하지 않는 경우이다 상관없이이 가지고있는 권한, 일반 때문에 파일은 일반 파일입니다. 그래서 나는 당신이 읽기 허가를 확인해야한다고 생각하고 그것이 설정되어 있다면 파일을 읽고 chmod()을 사용하여 읽기를 금지하는 권한을 설정하십시오. 당신이 파일의 소유자 인 경우

/* Check it it is readable by the user */ 
if ((file_info.st_mode & S_IRUSR)==0) 
{ 
    return false; 
} 

/* If it is, open and read the file... */ 
... 
... 

/* Mark it as not readable by the user. file_name is assumed 
    to be the name of the file as you have used it upon calling 
    lstat */ 
chmod (file_name, file_info.st_mode & ~S_IRUSR); 
+0

@ Petesh : 감사합니다! :) –

+0

두 분 모두 감사합니다. – user2845185

1

직접 파일의 권한을 변경 터미널에서 chmod 명령을 사용할 수 있습니다 (당신은 타사 도구를 실행하는 경우 소유자가 될 수 있음).
"예 : chmod 666 log.txt"
chmod 전에 sudo를 사용할 필요가 없습니다.

+0

그 파일이 서버에서 실행될 때 나는 터미널을 열려면 거기에 갈 수 없다 ... 이것은 논리적이다. – user2845185

+0

간단한 C 프로그램을 작성할 때도 마찬가지입니다. :-) – Pala

관련 문제