Linux API/network2009.07.02 16:38
원래는 파일의 생성일을 알아보려고 찾았는데..
리눅스에서는 파일 생성일은 저장을 안한다고 한다.

	struct stat
	{
		dev_t     st_dev;     /* ID of device containing file */
		ino_t     st_ino;     /* inode number */
		mode_t    st_mode;    /* protection */
		nlink_t   st_nlink;   /* number of hard links */
		uid_t     st_uid;     /* user ID of owner */
		gid_t     st_gid;     /* group ID of owner */
		dev_t     st_rdev;    /* device ID (if special file) */
		off_t     st_size;    /* total size, in bytes */
		blksize_t st_blksize; /* blocksize for filesystem I/O */
		blkcnt_t  st_blocks;  /* number of blocks allocated */
		time_t    st_atime;   /* time of last access */
		time_t    st_mtime;   /* time of last modification */
		time_t    st_ctime;   /* time of last status change */
	};

위는 man fstat의 내용으로, 위에 보듯, time_t 구조체가 세개가 있는데
last access / modification / change 세가지 뿐이다.

[링크 : http://www.linuxhomenetworking.com/forums/showthread.php?t=17449]
신고
Posted by 구차니
TAG fstat

댓글을 달아 주세요

  1. 하이

    안녕하세요. time_t가 구조체 인가요? ㅡ

    2010.10.01 13:08 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • http://minimonk.tistory.com/1103 를 참고하시기 바랍니다.
      제가 알기로는 timt_t 는 실제로 int 형의 변수이고, tm 은 구조체로 년/월/일 식으로 분리되어 있는 것으로 알고 있습니다.


      (리눅스에서 출력해보면 timt_t는 4바이트 struct tm은 44바이트가 나옵니다.)

      2010.10.01 14:44 신고 [ ADDR : EDIT/ DEL ]

Linux2008.12.16 17:35
굳이 파일이 존재 하는지 확인을 하려면

1. fopen()의 리턴값을 확인한다.
FILE *fopen(const char *path, const char *mode);
FILE 포인터로 리턴을 하는데 open 실패시 NULL을 리턴하며, errno에 에러를 기록함.

2. access()로 확인한다.
int access(const char *pathname, int mode);
리턴값을 바로 확인하면 됨.

3. fstat()의 리턴값을 확인한다
int fstat(int filedes, struct stat *buf);
리턴값을 바로 확인하면 됨.

구차니즘을 털고 2008.01.06일 테스트
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <time.h>
int main()
{
        int ret = 0;
        clock_t before;
        clock_t after;
        double res;
        FILE *fp;
        struct stat st;

        before = clock();
        fp = fopen("test.txt","rb");
        after = clock();
        printf("%d - %d = %d tick\n",after, before,after - before);

        before = clock();
        ret = access("test2.txt",F_OK);
        after = clock();
        printf("%d - %d = %d tick\n",after, before,after - before);

        before = clock();
        ret = stat("test3.txt",&st);
        after = clock();
        printf("%d - %d = %d tick\n",after, before,after - before);

        return 0;
}

로 테스트 하는데, 전부 0 tick이 나온다 ㄱ-
결론은 어느걸 쓰던지 현존 시스템에서는 지장이 없다는 의미인데, 임베디드에서 쓰기 위해서는
조금 더 자세히 조사를 해봐야 할 듯 하다.

dmesg | grep CPU
CPU0: Intel(R) Pentium(R) 4 CPU 3.40GHz stepping 0a

$ time ./a.out
0 - 0 = 0 tick
0 - 0 = 0 tick
0 - 0 = 0 tick

real    0m0.001s
user    0m0.000s
sys     0m0.001s

이래저래 측정이 안되는건 마찬가지 ㄱ-




fopen(open) / access / fstat 에러 모음은 아래 클릭!

더보기


신고
Posted by 구차니

댓글을 달아 주세요

  1. 새콤달콤

    한 10만번쯤 루프 돌리면 성능차이가 나지 않을까요?

    2012.08.29 11:32 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 그렇게 많은 양의 파일을 열어 볼일은 거의 없을테고..
      그러면 IO에 영향을 받는지 함수자체가 무거운건지 분간이 안될것 같아요 ㅠ.ㅠ

      2012.08.30 15:02 신고 [ ADDR : EDIT/ DEL ]