ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C/C++ readlink(2)
    C,C++ & Linux 2020. 5. 18. 22:57
    728x90

    readlink(2) 함수 기능

    심볼릭링크 파일이 어떤 파일을 가리키는지 알아내는 함수입니다.

    함수 원형

    #include <unistd.h>
    
    ssize_t readlink(const char *filepath, void *buf, size_t bufsize);

    매개변수

    filepath

    읽고자 하는 대상 심볼릭링크 파일의 경로

     

    buf

    심볼릭 링크 파일이 가리키는 파일명을 저장할 버퍼

     

    bufsize

    버퍼의 크기

    반환값

    성공 시 읽어 들인 데이터 바이트 수 리턴

    에러 시 -1 리턴하고 errno 설정

    예제

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    
    int main(int argc, char *argv[]) {
        char buf[1024];
        int length;
    
        // argv[1]의 심볼릭 링크 파일인 argv[2] 파일 생성
        if (symlink(argv[1], argv[2]) < 0) {
            fprintf(stderr, "%s symlink error\n", argv[1]);
            exit(1);
        }
    
        printf("%s -> %s\n", argv[1], argv[2]);
    
        // 평범한 read 함수로 심볼릭 링크 파일을 읽는 경우
        int fd = open(argv[2], O_RDONLY);
        length = read(fd, buf, sizeof(buf));
        buf[length] = '\0';
    
        // 심볼릭 링크 파일이 가리키는 argv[1] 파일이 읽어지면서
        // 그 내용이 화면에 출력됨
        printf("Read = %s\n", buf);
    
        // readlink 를 통해 심볼릭 링크가 어떤 파일을 가리키는지 알아냄
        length = readlink(argv[2], buf, sizeof(buf));
        buf[length] = '\0';
    
        // argv[2]가 가리키고 있는 argv[1]의 파일명이 화면에 출력됨
        printf("Readlink = %s\n", buf);
    
        exit(0);
    }
    

     

    결과

     

     

     

     

     

     

     

     

     

    리눅스시스템프로그래밍 저자 : 홍지만
    https://book.naver.com/bookdb/book_detail.nhn?bid=14623672

    책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)

    'C,C++ & Linux' 카테고리의 다른 글

    C/C++ mkdir(2)  (0) 2020.05.19
    C/C++ utime(2)  (0) 2020.05.19
    C/C++ symlink(2)  (0) 2020.05.18
    C/C++ rename(2)  (0) 2020.05.18
    C/C++ remove(3)  (0) 2020.05.18

    댓글

Designed by Tistory.