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

link(2)

1장. link(2)

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

파일(:12)에 대한 새로운 이름을 만든다.


1.1절. 사용법

#include <unistd.h>

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


1.2절. 설명

link는 oldpath 로 존재하는 파일에 대해서 새로운 연결 - 보통 하드링크(:12) 라고 한다 -을 만든다.

만약 newpath 가 이지 존재하고 있다면, 덮어쓰지 않는다.

이것은 copy(:12) 와는 다르다. 2개의 파일은 같은 inode(:12) 로 서로 연결되어 있다. 그러므로 link 는 서로 다른 장치(:12)들 사이에는 사용이 불가능하다. 서로 다른장치(파일시스템) 사이를 연결하려면 symlink(2) 를 사용해야 한다.


1.3절. 반환값

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


1.4절. 에러

EXDEV

oldpath 와 newpath가 같은 파일시스템(:12)에 있지 않을경우, oldpath 와 newpath는 같은 파일시스템(:12)에 있어야 한다.

EPERM

oldpath 와 newpath를 포함하는 파일시스템은 하드링크 생성을 지원하지 않는다.

EACCESS

newpath를 포함하는 디렉토리(:12)에 대한 쓰기 권한이 없다. 혹은 newpath 의 디렉토리 구성요소중 어느 하나에 대해서 실행 허가권을 가지고 있지 않을경우

ENOENT

oldpath 혹은 newpath 에 있는 디렉토리 구성요소가 존재하지 않을경우

EROFS

일기전용 파일시스템일경우

EEXIST

newpath 가 이미 존재할때


1.5절. 예제

#include <unistd.h>

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

int main(int argc, char **argv)
{
	if ( argc != 3)
	{
		printf ("Usage: ./link [원본파일] [복사파일]\n");
		return -1;
	}	

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

	if( access(:12) (argv[2], F_OK) == 0)
	{
		printf("이미파일이 존재합니다\n");
		return -1;
	}

	if (link (argv[1], argv[2]) == -1)
       {
		perror("link error ");
       }
}