2014-05-23 4 views
0

웹 사이트에서 일부 정적 분석 및 수정을 수행하기 위해 C++ 프로그램을 작성하고 있습니다. 프로젝트 파일은 변경하지 않지만 파일은 새 폴더에서 복사, 분석 및 수정됩니다.C++/boost : 프로세스 확인 권한

(프로그램/사용자가 실행하는) 파일을 읽고 (파일을 읽고) 실행하고 (디렉토리 계층을 처리하기 위해) 실행하고 (파일/디렉토리를 쓰기 위해) 충분한 권한이있는 경우 예를 들어 boost::filesystem을 사용하여 확인하는 방법이 있습니까? 현재 폴더와 그 파일들 (또는 적어도 유닉스 시스템 하에서) 새로운 폴더를 생성 할 수 있습니까?

답변

1

아니요, 부스트 프로그램 옵션 라이브러리로 파일 권한을 확인할 수 없습니다. 파일 권한은 부스트 ​​파일 시스템 라이브러리를 조회 할 수 있습니다 : 권한 플래그의

#include <boost/filesystem.hpp> 
#include <stdio.h> 

namespace bfs=boost::filesystem; 

int main(int argc,char * argv[]) 
{ 
    if (argc < 2) 
     return; 

    bfs::path p(argv[1]); 
    bfs::file_status s = status(p); 
    printf("%X\n",s.permissions()); 
} 

값은 내가 내 질문에 말했다 입력해도 부스트/파일 시스템/V3/operations.hpp

+0

오! 그것은 집중력의 약화였다. 나는 boost :: filesystem을 참조했다. –

+0

편집되고 수정되었습니다. –

0

리눅스를 사용하는 경우 모드 권한, 소유자 ID 및 해당 파일의 소유자 그룹 ID를 비롯하여 파일에 대한 정보를 얻으려면 stat 기능을 사용할 수 있습니다.

그런 다음 getuid을 사용하여 프로그램을 실행하는 사용자의 권한을 stat으로 얻은 권한과 비교할 수 있습니다.

두 링크 (실제로는 맨 페이지 임)에는 이러한 기능을 사용하는 방법에 대한 예제가 있습니다.

또한 선택한 파일에 대해 몇 가지 작업을 수행하고 쓰기를 말한 다음 예외를 올바르게 처리 할 수 ​​있습니다. 파일에 액세스 할 필요가 없으며 writting을 위해 파일을 열려고 시도합니다. 예외가 발생하여 errnoEACCESS (사용 권한이 거부 됨)과 같으면 shuch 권한이 없습니다.

+0

에서 열거 파마로 "또는 적어도 있습니다 유닉스 시스템에서 ","선택된 파일에 대한 작업 "을하지 않고도 휴대용 방식으로 권한을 확인하기위한 라이브러리가 있습니까? –