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