C에서 현재 작업 디렉토리 가져 오기
-
getcwd
함수를 사용하여 현재 작업 디렉토리 가져 오기 -
getcwd
함수에서 반환 된 값을 올바르게 확인하여 C에서 현재 작업 디렉토리 가져 오기 -
get_current_dir_name
함수를 사용하여 현재 작업 디렉토리 가져 오기
이 기사는 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으로 설정했습니다. 크기 인수가 작업 디렉토리의 경로 이름보다 작 으면errno
가ERANGE
로 설정됩니다.
#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);
}
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