Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

symlink(2)

1장. symlink(2)

차례
1.1절. 사용법
1.2절. 설명
1.3절. 반환값
1.4절. 에러
1.5절. 예제

파일에 대한 심볼릭 링크를 만든다.


1.1절. 사용법

#include <unistd.h>

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


1.2절. 설명

oldpath 파일에 대한 심볼릭 링크 newpath 를 만든다.

만일 심볼릭 링크 newpath가 이미 존재한다면 이를 덮어쓰지 않는다.


1.3절. 반환값

성공할경우 0을 실패했을경우에는 -1을 반환하며, 적당한 errno 값을 설정한다.


1.4절. 에러

EPERM

newpath 를 포함하는 파일 시스템이 심볼릭 링크를 지원하지 않을경우

EFAULT

oldpath 또는 newpath가 접근할수 있는 주소 공간외를 가르키고 있을경우

EACCESS

newpath 를 포함하는 디렉토리에 대해 쓰기 접근이나 실행권한이 허용되지 않았을경우

ENOTDIR

newpath 에서 디렉토리로 사용된 요소가 디렉토리(:12)가 아닐경우

EROFS

newpath 가 읽기-전용 파일 시스템일경우

EEXIST

newpath 가 이미 존재할 경우


1.5절. 예제

#include <unistd.h>

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

int main(int argc, char **argv)
{
    int opt;

    if ( argc < 3)
    {
        printf ("Usage: ./link [s|h|d] [원본파일] [복사파일]\n");
        return -1;
    }   

    if(access(argv[2], F_OK) != 0)  
    {
        printf("원본파일이 없습니다\n");
        return -1;
    }


    while((opt = getopt(argc, argv, "shd")) != -1)
    {
        switch(opt)
        {
            case 's':
                if(access(argv[3], F_OK) == 0)
                {
                    printf("이미파일이 존재합니다\n");
                    return -1;
                }
                printf("심볼릭 링크\n");
                symlink(argv[2], argv[3]);
                break;

            case 'h':
                if(access(argv[3], F_OK) == 0)
                {
                    printf("이미파일이 존재합니다\n");
                    return -1;
                }
                printf("하드링크\n");
                link(argv[2], argv[3]);
                break;
            case 'd':
                printf("링크해제\n");
                unlink(argv[2]);    
                break;
        }
    }
}
		
위 예제는 심볼릭링크나 하드링크를 만들거나 링크를 삭제하는 일을한다. getopt(3)을 이용해서 아규먼트를 분석해서 '-s' 일경우 원본파일에 대한 심볼릭링크를 만든다.

관련글 시스템프로그래밍(:12), C(:12), link(:12), 링크(:12)