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( "~/temp/a/b/c") 처럼요. 또한, 생성하려는 디렉터리 전체 이름이 NULL 포함 1024 바이트보다 크면 안 됩니다. 만일 1024보다 큰 이름의 디렉터리를 생성하려면 force_directory() 함수 내의 buff 배열 크기를 키우세요.
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 파일 크기 구하기 함수 filesize() (0) | 2022.04.30 |
---|---|
C언어 초보자 추천 신동준 C언어 입문과 실습 (0) | 2022.04.26 |
리눅스 터미널 ls --color 색상 변경 방법 (1) | 2022.04.22 |