读书人

《UNIX环境高级编程》札记-文件时间

发布时间: 2013-10-16 11:29:46 作者: rapoo

《UNIX环境高级编程》笔记--文件时间

对于每个文件都有3个时间字段,它们保存在stat结构中:

《UNIX环境高级编程》札记-文件时间

修改时间是对文件内容最后一次修改的时间,更改时间是对文件的i节点最后一次修改的时间。

下面使用linux命令来说明说明文件的三个时间字段。

生成文件,使用stat命令查看文件的三个时间,三个时间相同:

yan@yan-vm:~/apue$ touch timefile

yan@yan-vm:~/apue$ stat timefile
File: `timefile'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 939363 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ yan) Gid: ( 1000/ yan)
Access: 2013-07-10 11:05:09.220457813 +0800
Modify: 2013-07-10 11:05:09.220457813 +0800
Change: 2013-07-10 11:05:09.220457813 +0800
Birth: -

写入字符到文件:

yan@yan-vm:~/apue$ echo "123" > timefile
yan@yan-vm:~/apue$ stat timefile
File: `timefile'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 939363 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ yan) Gid: ( 1000/ yan)
Access: 2013-07-10 11:05:09.220457813 +0800
Modify: 2013-07-10 11:08:25.660465123 +0800
Change: 2013-07-10 11:08:25.660465123 +0800
Birth: -

文件的访问时间没有改变(没有访问文件),文件的修改时间变动(文件内容被修改),文件的更改时间变动(猜想,文件写入了

新的内容,文件的长度等信息发生变化,而这些信息是在i节点中的)

读取文件:

yan@yan-vm:~/apue$ cat timefile
123
yan@yan-vm:~/apue$ stat timefile
File: `timefile'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 939363 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ yan) Gid: ( 1000/ yan)
Access: 2013-07-10 11:11:44.036460054 +0800
Modify: 2013-07-10 11:08:25.660465123 +0800
Change: 2013-07-10 11:08:25.660465123 +0800
Birth: -

文件的访问时间改变(读取了文件),文件的修改和更改时间没有变动(没有修改文件,也没有更改文件属性)

yan@yan-vm:~/apue$ chmod o+w timefile
yan@yan-vm:~/apue$ stat timefile
File: `timefile'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 939363 Links: 1
Access: (0666/-rw-rw-rw-) Uid: ( 1000/ yan) Gid: ( 1000/ yan)
Access: 2013-07-10 11:11:44.036460054 +0800
Modify: 2013-07-10 11:08:25.660465123 +0800
Change: 2013-07-10 11:13:05.992583715 +0800
Birth: -

文件的访问和修改时间没有改变(没有访问和修改文件的内容),文件的更改时间改变(更改了文件的属性)

注意:系统并不保存对一个i节点的最后一次访问时间,所以access和stat函数并不更改这3个时间。


对文件的增加,删除,修改会影响文件所在的目录相关的时间,具体如下表所示:

《UNIX环境高级编程》札记-文件时间


一个文件的访问和修改时间可以用utime函数更改。

#include <stdio.h>#include <utime.h>#include <fcntl.h>int main(void){        struct stat statbuf;        struct utimbuf timebuf;        if(stat("timefile", &statbuf)<0){                perror("stat");                return -1;        }        timebuf.actime = statbuf.st_atime+10;        timebuf.modtime = statbuf.st_mtime+20;        if(utime("timefile", &timebuf)<0){                perror("utime");                return -1;        }        return 0;}
运行结果:

yan@yan-vm:~/apue$ stat timefile
File: `timefile'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 939363 Links: 1
Access: (0666/-rw-rw-rw-) Uid: ( 1000/ yan) Gid: ( 1000/ yan)
Access: 2013-07-10 12:15:10.256707533 +0800
Modify: 2013-07-10 12:15:10.256707533 +0800
Change: 2013-07-10 12:15:10.256707533 +0800
Birth: -
yan@yan-vm:~/apue$ date
Wed Jul 10 12:15:17 CST 2013
yan@yan-vm:~/apue$ ./a.out
yan@yan-vm:~/apue$ stat timefile
File: `timefile'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 939363 Links: 1
Access: (0666/-rw-rw-rw-) Uid: ( 1000/ yan) Gid: ( 1000/ yan)
Access: 2013-07-10 12:15:20.000000000 +0800
Modify: 2013-07-10 12:15:30.000000000 +0800
Change: 2013-07-10 12:15:18.556685755 +0800

访问时间增加了10秒,修改时间增加了20秒,更改时间修改为程序执行时的时间。

读书人网 >编程

热点推荐