SYMLINK(2)

이름
symlink - 파일에 새로운 이름을 만든다.

사용법
#include <unistd.h>

int symlink(const char *oldpath, const char *newpath);

설명
symlink 는 oldpath를 포함하는 newpath 라는 이름의 상징 연결을 만든다. 상징 연결은 마치 연결의 내용들이 파일이나 디렉토리를 찾기위해 따라가는 경로로 바뀐것처럼 run-time시에 해석된다. 상징 연결은 연결이 있는 곳의 상위 디렉토리를 가리키는(만일 연결의 시작에서 사용된다면) .. 경로 요소들을 포함할수 있다. 상징 연결(또한 소프트 연결이라 불려진다)은 존재하는 파일이나 존재하지 않는 파일을 가리킬수 있다; 나중의 경우는 dangleing 연결로 알려져 있다. 상징 연결의 허가권들은 관련이 없다; 소유자는 연결을 따라갈때 무시되며 연결에 대한 제거나 새이름을 요구할때와 연결이 sticky-bit가 설정되어 있는 디렉토리에 있을때는 검사된다. 만일 newpath 가 존재한다면 그것은 덮어 쓰여지지 않는다.

반환값
성공시, 0이 리턴된다. 에러시 -1이 리턴되며 errno 는 적당한 값으로 설정된다.

에러

EPERM
    newpath를 포함하는 파일 시스템은 상징 연결을 만드는걸 지원하지 않는다.

EFAULT
    oldpath 또는 newpath가 접근할수 있는 주소 공간외를 가리키고 있다.

EACCES
    newpath 를 포함하는 디렉토리에 대한 쓰기 접근이 프로세스의 유효 uid에 허가되지 않았거나 newpath에 있는 디렉토리중 하나가 탐색(실행) 허가권을 허용하지 않는다.

ENAMETOOLONG
    oldpath 또는 newpath 가 너무 길다.

ENOENT
    newpath 에 있는 디렉토리 요소가 존재하지 않거나 dangling 상징 연결이거나 oldpath 가 빈 문자열 이다.

ENOTDIR
    newpath에서 디렉토리로써 사용된 요소가 사실은 디렉토리가 아니다.

ENOMEM
    이용할수 있는 커널 메모리가 충분하지 않다.

EROFS
    newpath 가 읽기-전용 파일 시스템이다.

EEXIST
    newpath 가 이미 존재한다.

ELOOP
    너무 많은 상징 연결들을 newpath번역시에 만났다.

ENOSPC
    파일을 포함하는 장치가 새로운 디렉토리를 위한 공간을 가지고 있지 않다.

EIO I/O 에러가 발생했다.

주의
oldpath 에 대한 어떤 검사도 하지 않았다. 상징에 의해 참조되는 이름을 지우는것은 실제로 파일(만일 이것이 다른 하드 연결들을 가지고 있지 않다면)을 지우는 것이다. 만일 이러한 행동을 원하지 않는다면, link를 사용해라.

호환
SVr4, SVID, POSIX, BSD 4.3. SVr4 는 SVr4, SVID, BSD 4.3, X/OPEN 를 위한 에러코드를 문서화 했다. SVr4 는 EDQUOT 그리고 ENOSYS 에러코드들을 추가적으로 문서화 했다. 같은 이름을 가지고 있는 다중 파일들 그리고 NFS 를 위해 open(2)를 참조해라.

관련 항목
readlink(2), link(2), unlink(2), rename(2), open(2), lstat(2), ln(1)

역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 8월 5일