반응형
    
    
    
  
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 :
반응형
    
    
    
  'C언어 header > unistd.h' 카테고리의 다른 글
| stat(2) - 파일의 상태 및 정보를 얻는 함수 (0) | 2019.10.01 | 
|---|---|
| sleep(3) - 설정된 초(second) 동안 대기 (0) | 2019.10.01 | 
| pwrite(2) - 지정된 위치에 파일 쓰기 (0) | 2019.10.01 | 
| pread(2) - 지정된 위치에서 파일 읽기 (0) | 2019.10.01 | 
| lstat(2) - symbolic link의 상태 및 정보를 얻는 함수 (0) | 2019.10.01 | 
 
							 
							