본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 하위 디렉터리까지 생성 디렉터리 만들기 함수

C언어 하위 디렉터리까지 생성 디렉터리 만들기 함수

· 댓글개 · 바다야크

C언어 하위 디렉터리까지 모든 디렉터리 만들기 함수

C언어에서 mkdir() 함수로 디렉터리를 생성할 수 있지만, 만들려는 디렉터리의 상위 디렉터리가 있어야 생성됩니다. 디렉터리가 없는 곳에 디렉터리를 만들 수 없습니다. 그래서 상위 디렉터리가 없으면 상위 디렉터리를 차례로 만들어 전체 디렉터리를 만드는 함수 force_directory()입니다.

force_directory()

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>

void  force_directory( char *a_dirc){

   char    buff[1024];
   int     sz_dirc;
   int     ndx;
   
    sz_dirc = strlen( a_dirc);
    for ( ndx = 1; ndx < sz_dirc; ndx++){
        if ( '/' == a_dirc[ndx]){
            memset( buff, 0, sizeof( buff));
            memcpy( buff, a_dirc, ndx);
            if ( 0 != access( buff, F_OK)){
                mkdir( buff, 0777);
            }
        }
    }
    if ( 0 != access( a_dirc, F_OK)){
        mkdir( a_dirc, 0777);
    }
}

int main( void)
{
   force_directory( "/home/jwjw/temp/a/b/c");
   return 0;
}

예제 실행

jwjw@temp$ ls -al
합계 8
drwxrwxr-x  2 jwjw jwjw 4096  4월 22 16:19 .
drwxr-xr-x 27 jwjw jwjw 4096  4월 22 16:18 ..

              // temp 디렉터리 안은 비어있습니다.
              // force_directory()를 호출하는 예제를 실행합니다.

jwjw@temp$ ls -al
합계 12
drwxrwxr-x  3 jwjw jwjw 4096  4월 22 16:24 .
drwxr-xr-x 27 jwjw jwjw 4096  4월 22 16:18 ..
drwxr-xr-x  3 jwjw jwjw 4096  4월 22 16:24 a
jwjw@temp$ cd a
jwjw@a$ ls -al
합계 12
drwxr-xr-x 3 jwjw jwjw 4096  4월 22 16:24 .
drwxrwxr-x 3 jwjw jwjw 4096  4월 22 16:24 ..
drwxr-xr-x 3 jwjw jwjw 4096  4월 22 16:24 b
jwjw@a$ cd b
jwjw@b$ ls -al
합계 12
drwxr-xr-x 3 jwjw jwjw 4096  4월 22 16:24 .
drwxr-xr-x 3 jwjw jwjw 4096  4월 22 16:24 ..
drwxr-xr-x 2 jwjw jwjw 4096  4월 22 16:24 c
jwjw@b$ cd c
jwjw@c$ ls -al
합계 8
drwxr-xr-x 2 jwjw jwjw 4096  4월 22 16:24 .
drwxr-xr-x 3 jwjw jwjw 4096  4월 22 16:24 ..
jwjw@c$

터미널의 화면 캡쳐 이미지입니다.

force_directory() 예제 실행 결과

주의하실 것은 생성하려는 디렉터리에 홈 디렉터리를 의미하는 ~을 사용하면 안 됩니다. 즉, force_directory( "~/temp/a/b/c") 처럼요. 또한, 생성하려는 디렉터리 전체 이름이 NULL 포함 1024 바이트보다 크면 안 됩니다. 만일 1024보다 큰 이름의 디렉터리를 생성하려면 force_directory() 함수 내의 buff 배열 크기를 키우세요.

SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.