반응형
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 |