readlink(2)

#include <unistd.h>

ssize_t readlink(const char *path, char *buf, size_t bufsiz);

path가 symbolic link일 경우에 symbolic link의 origianl 파일명을 buf에 저장합니다. buf에는 null-terminated string으로 저장되지 않기 때문에 buf를 memset(3)으로 초기화가 필요합니다.

 

 

파라미터

 path
     - symbolic link 파일에 대한 상대 path 또는 절대 path
     - 반드시 symbolic link 파일이어야 합니다.
buf
    - path가 가리키고 있는 원본 파일명 또는 디렉토리명을 저장할 buffer
    - buf에 저장될 때에 파일명 또는 디렉토리명은 null-termincated string이 아니므로 
      memset(3)을 하고 사용하는 것이 좋습니다.
bufsiz
    - buf의 크기

 

RETURN

0 이상
    - 정상적으로 수행되었으며, buf에 저장된 symbolic link의 원본 파일명의 길이(byte)

-1
    - 오류가 발생하였으며, 상세한 오류내용은 errno 전역변수에 설정됩니다.

  EACCES : path에 대해 조회 권한이 없습니다.
  EFAULT : buf의 영역이 access할 수 없는 영역의 메모리입니다.
  EINVAL : bufsiz가 0 또는 음수입니다.
  EINVAL : path가 가리키는 파일 또는 디렉토리가 symbolic link가 아닙니다.
  EIO : 파일 시스템을 읽는 도중에 I/O 오류가 발생하였습니다.
  ELOOP : 너무 많은 depth의 symbolic link가 걸렸습니다.
  ENAMETOOLONG : path의 파일명이 NAME_MAX보다 크거나, full path가 PATH_MAX보다 큽니다.
  ENOENT : path는 없는 파일 또는 디렉토리입니다.
  ENOMEM : 사용할 수 있는 kernel 메모리가 부족합니다.
  ENOTDIR : path를 구성하는 디렉토리 중에서 없는 디렉토리가 있습니다.

 


활용 예제

 

Sample

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>

int main(int argc, char **argv)
{
    char buf[1024];
    int len;

    memset(buf, 0x00, sizeof(buf));

    if((len = readlink(".", buf, 1024)) == -1) {
        perror("readlink error");
        return 1;
    }
    
    printf("%d : %d\n", len, strlen(buf));
    printf("symbolic link's original path: %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.

댓글을 달아 주세요