Fundamental of Software Develop/: : Linux System Programming

디렉터리 관리하기 (위치 검색, 이름 변경, 이동)

Jay.P Morgan 2023. 11. 9. 23:57

  현재 작업 디렉터리의 위치 검색 : getcwd(), get_current_dir_name()

현재 작업 디렉터리의 위치를 파악할 때 사용하는 함수는 getcwd(), get_current_dir_name(), getwd()이다.

 

이 중, getcwd(), get_current_dir_name() 함수에 대해 알아보자. (※ 현재 디렉터리의 위치를 검색할 때 쓰는 명령어pwd이다.)

 

현재 작업 디렉터리 위치 검색 (1) : getcwd()

  getcwd() 함수는 현재 디렉터리의 절대 경로를 리턴한다.

#include <unistd.h>

char *getcwd(char *buf, size_t size);

    buf : 현재 디렉터리의 절대 경로를 저장할 버퍼 주소,  size : 버퍼의 크기

 

    함수 인자를 지정하는 방법은 아래 3가지 중에서 선택한다.

      1) buf에 경로를 저장할 만큼 충분한 메모리를 할당하고, 그 크기를 size에 지정

      2) buf에 NULL을 지정하고, 할당이 필요한 메모리 크기를 size에 지정

      3) buf에 NULL을 지정하고, size는 0으로 지정

 

 

현재 작업 디렉터리 위치 검색 (2) : get_current_dir_name()

  get_current_dir_name() 함수는 시스템이 자동으로 메모리를 할당해 현재 디렉터리의 절대 경로를 저장하고 반환한다.

#include <unistd.h>

char *get_current_dir_name(void);

 

  getcwd(NULL, 0)과 동일하게 동작한다고 생각하면 된다.

 

 

 

  디렉터리 이름 변경 : rename()

#include <stdio.h>

int rename(const char *oldpath, const char *newpath);

  oldpath : 바꿀 파일/디렉터리명,  newpath : 새 파일/디렉터리명

 

  만일, 두 번째 인자로 지정한 이름과 동일한 이름이 기존에 있으면, 해당 디렉터리를 지운다. 실행 도중 오류가 발생하면 원본과 새로운 디렉터리명이 모두 남는다.

  rename() 함수는 수행에 성공하면 0을, 실패하면 -1을 반환한다.

 

 

 

  디렉터리 이동 : chdir(), fchdir()

디렉터리 이동 (1) : chdir() 함수

  chdir() 함수는 이동하려는 디렉터리의 경로를 인자로 받으며, 절대 경로(absolute path)와 상대 경로(relative path) 둘 다 사용 가능하다.

  디렉터이 이동에 성공하면 0을, 실패하면 -1을 반환한다.

#include <unistd.h>

int chdir(const char *path);

  path : 이동하려는 디렉터리 경로

 

※ chdir() 함수로의 디렉터이 이동은 함수 내부에서만 진행된 것을 알 수 있다.

 

 

 

디렉터리 이동 (2) : fchdir() 함수

  fchdir() 함수는 파일 디스크립터를 인자로 받는다. 파일 디스크립터는 open()함수로 디렉터리를 열고 돌려받는 것이다.

  디렉터리 이동에 성공하면 0을, 실패하면 -1을 반환한다.

#include <unistd.h>

int fchdir(int fd);

    fd : 이동하려는 디렉터리의 파일 디스크립터

※ open() 함수로 "kuk" 디렉터리를 열고, 리턴한 파일 디스크립터를 fchdir() 함수의 인자로 활용한다.

 

※ fchdir() 함수로의 디렉터이 이동은 함수 내부에서만 진행된 것을 알 수 있다.