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 :

    File 속성 정보 및 파일 관리 Library

    Directory 정보 조회 및 관리 Library

    System Call File I/O Library

    Stream File I/O Library

 

 

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요