본문 바로가기
프로그래밍 언어/C, C++ 다양한 예시들

[C 언어] 계층 구조의 하위 디렉토리 생성

by UltraLowTemp-Physics 2021. 1. 30.
728x90

1. Unix/Linux OS 

Unix계열의 환경에서 C언어로 디렉토리를 만드는 경우에 mkdir() 함수를 이용한다

    • Prototype:  int mkdir (const char *dirname, mode_t mode)
    • 헤더 파일: <sys/stat.h>
    • *dirname: 생성할 디렉토리의 경로 및 이름 
    • mode: 접근 권한 지정* 
    • 반환값 
       (1) 0 : 디렉토리를 정상적으로 생성함 
       (2) -1: 디렉토리를 생성 실패 
           - 만들려는 폴더가 이미 존재할 경우: errno → EEXIST
           - 폴더가 부정확한 경우: errno → ENOENT 

2. Windows 

윈도우 계열에서도 마찬가지로 동일한 함수인 _mkdir()을 이용해서 디렉토리를 만든다. 하지만, 헤더파일이 다르다.

   (1) mkdir()의 헤더 파일: <direct.h>
   (2) 명령어: int _mkdir(const char *dirname);

mkdir()함수를 이용하여 디렉토리를 만들 수 있다. 이때, 생성하고자 하는 디렉토리의 상위 디렉토리가 존재하지 않는다면, mkdir()함수를 이용하여 디렉토리를 만들 수 없다. 따라서, 만일 우리가 /home/users/example/test1/test2라는 test2 디렉토리를 만들고자 한다면 아래와 같이 상위 디렉토리들을 순서대로 만들어야 한다.

#include <sys/stat.h>       // mkdir()

int main(void){
	mkdir("/home/users/example");
	mkdir("/home/users/example/test1");
	mkdir("/home/users/example/test1/test2");
	return 0;
}

 

3. 하위 디렉토리를 자동으로 만드는 코드 

아래의 레퍼런스를 참조하길 바란다. 
[1] http://forum.falinux.com/zbxe/index.php?document_srl=554232&mid=lecture_tip  
[2] https://shaeod.tistory.com/322  
[3] https://www.it-note.kr/216
[4] https://jangpd007.tistory.com/42  

 

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

#define BUFF 1024

void mkdirs(char *dir_path){
	
    char buff[BUFF];
    char *p_dir = buff;        // 포인터를 문자열 처음으로
     
    strcpy(buff, dir_path);     // copy the path of the directory
    
    buff[BUFF-1] = '\0';
    
    while(*p_dir){
    	if('/'== *p_dir){   
            *p_dir = '\0';     // 잠시 문자열의 끝으로 설정 
            mkdir(buff, 0777); //
            *p_dir = '/';      // 문자열 원래대로 복귀
        }
        p_dir ++;
    }
}

위의 함수는 아래의 그림과 같은 방식으로 하위 디렉토리를 만들게 된다.

 

728x90

댓글