$ mkdir -p (path)
- mkdir -p 를 사용하면 mkdir를 하되 중간 지점에 있는 디렉토리들을 생성해줍니다.
- 예를 들어) mkdir -p /etc/abc/def 라고 입력을 한다면 /etc/abc라는 디렉토리가 없더라도 -p 옵션을 통해 필요한 최종 path의 directory (/etc/abc/def) 를 만드는데 필요한 디렉토리를 만들어 줍니다.
-p 옵션이란?
- -p, --parents no error if existing, make parent directories as needed (출저:linux.die.net/man/1/mkdir)
하지만, 소스코드에서 mkdir -p 커맨드를 사용하는 것처럼 디렉토리를 생성하려면 어떻게 하면 될까요?
아래는 dirname 함수와 stat 함수를 사용해서 mkdir을 하되 -p 옵션처럼 동작하도록 구현한 C 코드 입니다.
bool makeDir(const char* dirPath) {
if (strcmp(dirPath, ".") == 0 || strcmp(dirPath, "/") == 0)
return true;
struct stat info;
if (stat(dirPath, &info) == 0) return true;
char* parent;
char* tmp;
tmp = strdup(dirPath);
parent = dirname(tmp);
if (stat(parent, &info) != 0) makeDir(parent);
mode_t modeSet = 0777;
mkdir(dirPath, modeSet);
return true;
}
- dirname(char* path) 함수는 주어진 path의 부모 경로 (상위 디렉토리)의 경로를 char*로 반환해주는 함수입니다.
- 주의: dirname 인자로 const 형을 줄 수 없으니 strdup로 복사본을 만든 뒤 복사본을 인자로 사용해야 합니다.
- stat 함수를 사용하여 부모 경로 (parent)가 현재 유효한지를 판별 (유효 하면 0을 반환) 합니다.
- 유효하지 않다고 판단되면 부모 경로부터 만들도록 makeDir 함수를 재귀적으로 호출합니다.
- modeSet (0777) 같은 경우 해당 값이 umask (0022) 값과 ~연산 되어서 0755 (rwxr--r--) 권한으로 디렉토리를 생성하게 됩니다.
'Linux' 카테고리의 다른 글
WEB 면접 예상 질문) "웹 브라우저에 URL을 입력하면 일어나는 과정" (0) | 2025.02.19 |
---|---|
HR 면접 예상 질문과 답변 기준) "일 할 때 일 자산이 될 순간들" (0) | 2025.02.08 |
Linux) DAC의 한계 [Limitations of Discretionary Access Control] (0) | 2020.11.04 |
Linux) Capabilities (0) | 2020.10.29 |