C에서 현재 작업 디렉토리 가져 오기

Jinku Hu 2023년10월12일
  1. getcwd 함수를 사용하여 현재 작업 디렉토리 가져 오기
  2. getcwd 함수에서 반환 된 값을 올바르게 확인하여 C에서 현재 작업 디렉토리 가져 오기
  3. get_current_dir_name 함수를 사용하여 현재 작업 디렉토리 가져 오기
C에서 현재 작업 디렉토리 가져 오기

이 기사는 C에서 현재 작업 디렉토리를 얻는 방법에 대한 몇 가지 방법을 설명합니다.

getcwd 함수를 사용하여 현재 작업 디렉토리 가져 오기

getcwd 함수는 호출 프로그램의 현재 작업 디렉토리를 검색 할 수있는 POSIX 호환 시스템 호출입니다. getcwd는 두 개의 인수를받습니다. 경로 이름이 저장되는char *버퍼와 주어진 버퍼에 할당 된 바이트 수입니다. 이 함수는 현재 작업 디렉토리의 이름을 null로 끝나는 문자열로 저장하고 사용자는char *주소에 경로 이름을위한 충분한 공간이 있는지 확인해야합니다. getcwd는 디렉토리의 절대 경로 이름을 반환합니다.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#ifndef MAX_BUF
#define MAX_BUF 200
#endif

int main(void) {
  char path[MAX_BUF];

  getcwd(path, MAX_BUF);
  printf("Current working directory: %s\n", path);

  exit(EXIT_SUCCESS);
}

getcwd 함수에서 반환 된 값을 올바르게 확인하여 C에서 현재 작업 디렉토리 가져 오기

getcwd 함수는 올바른 값을 검색하지 못할 수 있습니다. 따라서 이러한 경우 NULL을 반환하고 해당 오류 코드와 함께 errno를 설정합니다. 사용자는 주어진 시나리오에서 필요에 따라 오류 검사 코드를 구현하고 프로그램의 제어 흐름을 수정해야합니다. errno 설정을 약속하는 라이브러리 함수를 호출하기 전에 그렇게하는 것이 가장 좋은 방법이므로getcwd 함수 호출 전에errno를 명시 적으로 0으로 설정했습니다. 크기 인수가 작업 디렉토리의 경로 이름보다 작 으면errnoERANGE로 설정됩니다.

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#ifndef MAX_BUF
#define MAX_BUF 200
#endif

int main(void) {
  char path[MAX_BUF];

  errno = 0;
  if (getcwd(path, MAX_BUF) == NULL) {
    if (errno == ERANGE)
      printf("[ERROR] pathname length exceeds the buffer size\n");
    else
      perror("getcwd");
    exit(EXIT_FAILURE);
  }
  printf("Current working directory: %s\n", path);

  exit(EXIT_SUCCESS);
}

또는 NULL값을 getcwd함수의 첫 번째 인수로 전달하고 0을 두 번째 인수로 전달할 수 있습니다. 함수 자체는 malloc을 사용하여 충분히 큰 버퍼를 동적으로 할당하고 위치에 대한 char포인터를 반환합니다. 사용자는 반환 된 포인터에서 free함수를 호출하여 버퍼 메모리를 할당 해제해야합니다.

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#ifndef MAX_BUF
#define MAX_BUF 200
#endif

int main(void) {
  char path[MAX_BUF];

  errno = 0;
  char *buf = getcwd(NULL, 0);
  if (buf == NULL) {
    perror("getcwd");
    exit(EXIT_FAILURE);
  }
  printf("Current working directory: %s\n", buf);
  free(buf);

  exit(EXIT_SUCCESS);
}

get_current_dir_name 함수를 사용하여 현재 작업 디렉토리 가져 오기

get_current_dir_name은 현재 작업 디렉토리를 검색 할 수있는 또 다른 함수입니다. 이 함수를 사용하려면_GNU_SOURCE 매크로를 정의해야합니다. 반대로 코드에서 컴파일 오류가 발생할 가능성이 있습니다. get_current_dir_name은 인수를 취하지 않으며getcwd 함수와 유사한char 포인터를 반환합니다. 메모리는 malloc을 사용하여 자동으로 할당되며 호출자 코드는 반환 된 포인터를 해제합니다.

#define _GNU_SOURCE
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#ifndef MAX_BUF
#define MAX_BUF 200
#endif

int main(void) {
  char path[MAX_BUF];

  errno = 0;
  char *buf = get_current_dir_name();
  if (buf == NULL) {
    perror("get_current_dir_name");
    exit(EXIT_FAILURE);
  }
  printf("Current working directory: %s\n", buf);
  free(buf);

  exit(EXIT_SUCCESS);
}
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook