C,C++ & Linux

C/C++ utime(2)

KyooDong 2020. 5. 19. 12:20
728x90

utime(2) 함수 기능

파일의 atime(Access Time), mtime(Modification Time) 을 수정하는 함수입니다.

 

struct utimbuf 구조

struct utimbuf {
    time_t actime;		// 접근 시간
    time_t modtime;		// 수정 시간
};

함수 원형

#include <utime.h>
#include <sys/types.h>

int utime(const char *filepath, const struct utimbuf *time);

매개변수

filepath

대상 파일의 경로

 

time

변경될 시간

반환값

성공 시 0 리턴

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

예제

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <utime.h>

int main(int argc, char *argv[]) {
    struct utimbuf time_buf;
    struct stat statbuf;
    int fd;

    for (int i = 1; i < argc; i++) {
		// 원래 atime, mtime을 가져옴
        stat(argv[i], &statbuf);

		// 파일을 열었기 때문에 access time이 갱신됨
        fd = open(argv[i], O_RDWR | O_TRUNC);
        close(fd);

		// 하지만 time_buf에 갱신되기 전의 atime, mtime 을 설정
        time_buf.actime = statbuf.st_atime;
        time_buf.modtime = statbuf.st_mtime;

		// 갱신되기 전의 시간을 설정하므로 프로그램 실행 후에도 atime, mtime 은 변하지 않음
        if (utime(argv[i], &time_buf) < 0) {
            fprintf(stderr, "utime error\n");
            continue;
        }
    }
    exit(0);
}

 

결과

 

 

 

 

 

 

 

 

 

 

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

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