[C 언어] 계층 구조의 하위 디렉토리 생성
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 ++;
}
}
위의 함수는 아래의 그림과 같은 방식으로 하위 디렉토리를 만들게 된다.