Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- C언어
- tensorflow
- CSS
- 멀티캐스트
- Raid
- RAID개념설명
- 라즈베리파이
- ubuntu18.04
- raspberrypi
- docker
- HTML
- html태그정리
- HTML예제
- 코딩테스트후기
- RIAD0
- TensorflowServer
- 다항회귀
- Linux
- 삼성SW역량테스트
- 다항회귀예제
- html input
- RAID구축
- Ubunrtu
- multicast
- 개념설명
- 삼성sw역량테스트b형
- 웹페이지 기본
- html input tag
- jupyter
- html환경구축
Archives
- Today
- Total
Easy ways
[C 언어] 디렉토리에서 가장 최근에/오래전에 수정된 파일 찾기. 본문
반응형
디렉토리에서 가장 오래전에 수정된 파일을 제거하려고 코드를 보던중
스택 오버플로에서 아주 간단해보이는 방식을 찾아서 공유해드리려고 합니다.
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
#include <string.h>
#include <ftw.h>
char filename[PATH_MAX];
time_t mtime = 0;
int check_if_newer(const char *path, const struct stat *sb, int typeflag)
{
if (typeflag == FTW_F && sb->st_mtime > mtime)
{
mtime = sb->st_mtime;
strncpy(filename, path, PATH_MAX);
}
return 0;
}
int check_if_older(const char *path, const struct stat *sb, int typeflag)
{
if (typeflag == FTW_F && (mtime == 0 || sb->st_mtime < mtime))
{
mtime = sb->st_mtime;
strncpy(filename, path, PATH_MAX+1);
}
return 0;
}
int main(void)
{
char *directory = "./log";
// The most recently modified file.
ftw(directory, check_if_newer, FTW_F);
printf("last modified file : %s\n", filename);
// oldest modified file name
ftw(directory, check_if_older, FTW_F);
printf("oldest modified file : %s\n", filename);
return 0;
}
실행 결과
이 코드에서 가장 중요한 함수는 ftw() 함수입니다.
ftw는 디렉토리에서 파일을 한번씩 살펴보고 처리하는 함수로,
매개변수 구조는 다음과 같습니다.
#include <ftw.h>
int ftw(const char *dirpath,
int (*fn) (const char *fpath, const struct stat *sb,
int typeflag),
int nopenfd);
보시면 ftw(파일경로, 수행할 함수, 파일 종류)로 구성되어있습니다.
첫번째 매개변수인 경로로 가서
두번째 매개변수인 함수를 수행하는 것입니다.
세번째 매개변수는 파일 종류로 간단하게 살펴보면 아래와 같습니다.
- FTW_F fpath is a regular file.
- FTW_D fpath is a directory.
- FTW_DNR fpath is a directory which can't be read.
해당 경로에 있는 파일을 한번씩 보면서 함수를 수행하는 것입니다.
check_if_older 함수는 가장 오래된 파일을 찾아주는 것이고,
check_if_newer 함수는 수정된지 가장 최근 파일을 찾아 주는 함수입니다.
트리만드는 것 보다 좀 느릴 수 있지만 간편하네요!
한정된 로그를 관리할 때 좋을 것같습니다.
참조 :
stackoverflow.com/questions/25382163/getting-the-oldest-file-in-a-directory-c
반응형
'프로그래밍 언어 > C언어' 카테고리의 다른 글
[C 언어] 프로그램이 read 에서 멈출때 해결법(read() 타임 아웃 설정:select) (2) | 2021.03.03 |
---|---|
[Linux/C 언어] 멀티캐스트 송신 코드 및 테스트 (Multicast Sender) (2) | 2021.02.26 |
[C 언어] 시리얼 통신 Open 함수 (struct termios) (1) | 2021.02.23 |
[C 언어] 현재 시간을 표시하는 방법 [time, ftime, ctime] (0) | 2021.01.13 |
Comments