반응형
realpath(3)
#include <stdlib.h>
char *realpath(const char *path, char *resolved_path);
realpath(3)함수는 상대 path를 절대 path로 변환하거나, symbolic link의 경우 symbolic link의 원본 파일 또는 디렉토리를 절대 path로 변환합니다. resolved_path가 NULL이면 PATH_MAX크기의 메모리를 할당하여 데이터를 변환한 후에 return합니다. 이 경우에는 return된 pointer를 free(3)로 해제해야 합니다.
파라미터
path
- 절대path로 변환할 상대path나 symbolic link
resolved_path
- 변환된 절대 path가 저장될 buffer. buffer는 PATH_MAX 크기로 충분히 잡아주는 것이 좋습니다.
만약 resolved_path를 NULL로 설정하면,
return값은 PATH_MAX의 크기로 malloc(3)으로 할당한 후에 변환된 결과를 return합니다.
따라서 NULL로 설정한 경우에는 pointer로 받아서 free(3)로 메모리 해제를 해주어야 합니다.
RETURN
NULL이 아닌 경우
- resolved_path가 NULL이 아니면, resolved_path를 return합니다.
resolved_path가 NULL이면, malloc(3)으로 할당하여 real path를 저장한 후에 return합니다.
따라서 pointer로 받은 후에 free(3)함수로 메모리 해제를 해주어야 합니다.
NULL
- 오류가 발생하였으며, 상세한 오류 내용은 errno 전역변수에 설정됩니다.
EACCES : path에 대해서 읽기 또는 검색 권한이 없습니다.
EINVAL : path가 NULL입니다.
EIO : 파일시스템을 읽는 도중에 I/O 오류가 발생하였습니다.
ELOOP : 너무 많은 depth의 symbolic link가 걸렸습니다.
ENAMETOOLONG : path의 파일명이 NAME_MAX보다 크거나, full path가 PATH_MAX보다 큽니다.
ENOENT : 없는 파일 또는 디렉토리입니다.
ENOTDIR : path를 구성하는 디렉토리 중에서 없는 디렉토리가 있습니다.
활용 예제
Sample: 현재 디렉토리에 대한 Full Path 정보 출력
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char buf[1024];
if(realpath(".", buf) == NULL) {
perror("realpath error");
return 1;
}
printf("real path is %s\n", buf);
return 0;
}
see also :
반응형
'C언어 header > stdlib.h' 카테고리의 다른 글
rand(3) - 난수(random값)를 얻는 함수 (0) | 2019.11.25 |
---|---|
system(3) - 명령어를 실행하기 : fork(2) + execl(3) (0) | 2019.10.04 |
realloc(3) - 메모리의 크기를 재할당하기 (3) | 2019.09.25 |
calloc(3) - 메모리 할당 및 초기화 수행 (0) | 2019.09.24 |
free(3) - 할당된 heap 메모리 해제 (0) | 2019.09.24 |