mkdir()를 이용하면 디렉토리를 생성할 수 있습니다. 그러나 상위 디렉토리가 없으면 생성되지 않습니다. 예를 들어 /temp/abc 에 def라는 디렉토리를 만들려고,

 

mkdir( "/temp/abc/def");

 

를 실행했을 때, /temp/abc가 있으면 def 디렉토리가 생성되지만, /temp만 있거나 temp 마저도 없으면 def 디렉토리가 생성되지 않습니다. 이럴 때는 만드려는 최종 디렉토리에 대해 상위 디렉토리가 있는지 확인해서 없으면 차례로 만들어 주어야 합니다.

 

델파이라는 개발툴에는 ForceDirectories()라는 매우 유용한 함수가 있었는데, 상위 디렉토리를 자동으로 만들어 주면서 결국 만들려는 전체 디렉토리를 생성해 줍니다. 델파이의 ForceDirectories()를 아래와 같이 구성했습니다. 필요하신 분은 사용하세요.

 

#include <stdio.h>
#include <unistd.h>         // access()
#include <string.h>         // memcpy()
#include <sys/stat.h>       // mkdir()

#define FORCE_DIRC_BUFF     1024

void  force_directories( char *a_dirc){

    char    buff[FORCE_DIRC_BUFF+1];
    char   *p_dirc  = buff;

    // 인수 a_dirc가 내용 수정이 불가능한 상수일 수 있으므로 버퍼를 이용
    memcpy( buff, a_dirc, FORCE_DIRC_BUFF);
    buff[FORCE_DIRC_BUFF]   = '\0';

    while( *p_dirc){
        if ( '/' == *p_dirc){
            *p_dirc = '\0';
            if ( 0 != access( buff, F_OK)){
                mkdir( buff, 0777);
            }
            *p_dirc = '/';
        }
        p_dirc++;
    }
    if ( 0 != access( buff, F_OK)){
        mkdir( buff, 0777);
    }
}

int main( void){

    force_directory( "/home/jwjw/temp/abc/def/ghi");
    return 0;
}