CS/UNIX

[Manage Files] - symlink / lstat / readlink 함수

sliver__ 2022. 10. 19. 00:45
728x90

[Symbolic Links]

 

  • 심볼릭 링크는 다른 파일 시스템에 있는 파일에 대한 링크를 제공한다.
  • 일종의 파일 시스템 re-director이다.
  • 프로그램이 심볼릭 링크와 함께 작동할 수 있도록 UNIX 커널은 심볼릭 링크와 관련된 몇 가지 시스템 호출을 제공한다.
  • symlink를 사용하면 link에 의해 생성되는 하드 링크와는 달리 심볼릭 링크를 생성한다.
  • 프로토타입은 아래와 같다.
#include <unistd.h>

int symlink(const char *path, const char *symlnk);
  • symlink가 path에 대한 심볼릭 링크를 가지게 한다.
  • 성공하면 0을 return한다.
  • 실패하면 -1을 return하고 errno에 이유를 적는다.
  • path가 존재할 필요는 없다.
  • 코드 예시는 아래와 같다.
if ( symlink("/etc/hosts","./my_hosts") == -1 )
    /* Report error */
else
    /* Success */

 

[lstat]

  • symbolic link에 대한 상태정보를 조회한다.
  • 프로토타입은 아래와 같다.
#include <sys/types.h>
#include <sys/stat.h>

int lstat(const char *path, struct stat *sb);
  • 성공하면 0을 return한다.
  • 실패하면 -1을 return하고 errno에 이유를 적는다.
  • lstat은 EINTR signal을 받을 수 있다.

 

[readlink]

  • 존재하는 symbolic link를 결정하기 위해 사용한다.
  • 프로토타입은 아래와 같다.
#include <unistd.h>

int readlink(const char *path, char *buf, int bufsiz);

 

  • 심볼릭 링크는 인수 경로에 제공된다.
  • 버퍼 포인터 buf는 심볼릭 링크 정보가 반환되어야 하는 위치를 나타낸다.
  • 인수 bufsiz는 readlink(2)가 반환할 수 있는 최대 바이트 수를 나타낸다.
  • readlink(2)에 의해 반환된 값은 버퍼 buf에 배치된 문자 수이다.
  • 성공하면 0을 return한다.
  • 실패하면 -1을 return하고 errno에 이유를 적는다.
  • 예시는 아래와 같다.
int z;
char buf[1024];

z = readlink("my_symlink",buf,sizeof buf-1);
if ( z == -1 )
    /* Report error */
else {
    /* Success */
    buf[z] = 0;    /* Null terminate */
    printf("symlink is '%s'\n",buf);
}
728x90