본문 바로가기
C

[C/C++] mkdir(2) 디렉터리 생성 함수 사용법

by Junk_Seo 2024. 3. 8.
반응형

mkdir(2) 함수 원형

#include <sys/stat.h>
#include <sys/types.h>

int mkdir(const char *pathname, mode_t mode);​

 

  • pathname의 이름으로 디렉터리를 생성합니다.
  • 중간 디렉터리가 생성되어 있지 않으면 오류가 발생합니다.
    • ex) "/test" 디렉터리 하위에 test1/test2 디렉터리를 생성하려는 경우
      • mkdir("test/test1/test2", 0755); : 오류
      • mkdir("test/test1", 0755); mkdir("test/test1/test2", 0755); : 성공
  • man 페이지에서 확인하기 위해선 "man 2 mkdir"을 사용해야 mkdir(2) 내용을 확인할 수 있습니다.
  • "man mkdir"을 사용하여 mkdir(1) 내용을 확인합니다.

매개변수

  • pathname
    • 생성하려는 디렉터리의 경로(상대 경로 또는 절대 경로)
  • mode
    • 생성하려는 디렉터리에 대한 접근 권한 설정 값
      매크로 8진수 설명
      S_IRWXU 0700 소유자(owner) 권한 마스크
      S_IRUSR 0400 소유자(owner) 읽기 권한
      S_IWUSR 0200 소유자(owner) 쓰기 권한
      S_IXUSR 0100 소유자(owner) 실행(검색) 권한
      S_IRWXG 0070 그룹(Group) 권한 마스크
      S_IRGRP 0040 그룹(Group) 읽기 권한
      S_IWGRP 0020 그룹(Group) 쓰기 권한
      S_IXGRP 0010 그룹(Group) 실행(검색) 권한
      S_IRWXO 0007 기타 사용자(Other) 권한 마스크
      S_IROTH 0004 기타 사용자(Other) 읽기 권한
      S_IWOTH 0002 기타 사용자(Other) 쓰기 권한
      S_IXOTH 0001 기타 사용자(Other) 실행(검색) 권한
    • 디렉터리에 대한 X(실행) 권한은 검색 권한입니다.
    • 검색 권한은 해당 디렉터리에 접근할 수 있느냐 없느냐에 대한 권한입니다.
    • 권한 설정은 or 연산으로 설정합니다.
      • ex) 0755 = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH

반환값

  • 0 : 성공
  • -1 : 실패, 오류 내용은 errno 전역 변수에 설정됩니다.

예제

  • sample
    #include <stdio.h>
    #include <string.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <errno.h>
    
    int do_mkdir(const char *pasPathName, mote_t mode)
    {
        int nStatus = 0;
        struct stat st;
    
        if (stat(pszPath, &st) != 0) 
        {
            if (0 != mkdir(pszPath, mode) && EEXIST != errno) 
            {
                nStatus = -1;
            }
        }
        else if (!S_ISDIR(st.st_mode)) 
        {
            nStatus = -1;
        }
    	
        return(nStatus);
    {
    
    int main()
    {
        int nResult = 0;
        nResult = do_mkdir("./test", 0755);
        if (0 > nResult)
        {
        	printf("디렉토리 생성 실패 \n");
        }
        else
        {
        	printf("티렉토리 생성 성공 \n");
        }
        
        return 0;
    }

 

반응형