ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C/C++ truncate(2) ftruncate(2)
    C,C++ & Linux 2020. 5. 18. 14:37
    728x90

    truncate 함수 기능

    파일의 크기를 조정하는 함수입니다.

     

    함수 원형

    #include <unistd.h>
    #include <sys/types.h>
    
    int truncate(const char *filepath, off_t length);
    int ftruncate(int fd, off_t length);

     

    매개변수

    filepath

    대상 파일의 경로

     

    fd

    대상 파일의 파일 디스크립터

     

    length

    대상 파일의 새 파일 크기 (바이트 단위)

     

    반환값

    성공 시 0 리턴

    에러 시 -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 *fname = "ssu_test.txt";
        int fd;
        char buf[1024];
        int length;
    
        fd = open(fname, O_RDONLY);
        printf("before truncate\n");
    
        // 파일을 읽어서 화면에 출력
        // 파일 크기가 크기 때문에 꽤 많은 내용이 출력됨
        length = read(fd, buf, sizeof(buf));
        write(1, buf, length);
        printf("\n");
    
        // 파일 크기를 10으로 조정
        if (truncate(fname, 10) < 0) {
            fprintf(stderr, "truncate error\n");
            exit(1);
        }
    
        // 파일 오프셋을 0으로 다시 세팅 후
        lseek(fd, 0, SEEK_SET);
        printf("After truncate\n");
    
        // 다시 읽어서 화면에 출력
        // 하지만 파일 크기가 10으로 줄었기에 10 글자만 출력되게 됨
        length = read(fd, buf, sizeof(buf));
        write(1, buf, length);
        printf("\n");
    
        exit(0);
    }
    

     

    결과

     

     

     

     

     

     

     

     

     

     

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

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

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

    C/C++ link(2) unlink(2)  (0) 2020.05.18
    하드링크, 심볼릭링크  (0) 2020.05.18
    C/C++ chown(2) fchown(2) lchown(2)  (0) 2020.05.18
    C/C++ chmod(2), fchmod(2)  (0) 2020.05.17
    C/C++ umask(2)  (1) 2020.05.17

    댓글

Designed by Tistory.