A C M time

A C M time

提到ACM我们会想到:ACM程序设计大赛。不过这里的ACM,都指的是时间。下面看一下他们的概念:


  • atime access time :访问时间,文件被读取或执行时会改变
  • mtime modify time :修改时间,文件本身内容被修改时会改变
  • ctime change time :更改时间,文件的属性被修改时会改变,如修改文件的权限,文件属组,+ia属性等等。

      一般mtime改变了ctime就会同时改变(inode更改相关)。注意ctime,ctime不是 create time 创建时linux 

像windows下会保留文件被创建的时间,所以一个文件被修改后它的创建时间就没有了。

     stat 文件名:当我们执行这样一条命令的时候,会出现:


那么,这三个时间的区别都是什么呢?

(1)Access是指“访问时间”

对于文件来说,当我们用编辑器打开file,或使用cat more less grep sed 等等命令读取文件内容,以及使用file cp命令操作文件,或执行可执行文件时,Access时间会被更新,空文件也不例外。

对于目录来说,只进入目录不会更新其Access时间,但是通过ls查看目录内容时,Access时间就会更新。使用ls -lu查看文件时,会显示出来文件的Access时间。

(2)Modify是指“更改时间”

当更改一个文件的内容时,此文件的modify时间记录会被更新。Modify时间更新时,Access和Change时间都会得到相

应的更新。用ls -l看到的时间是文件的Modify时间

(3)Change是指“改变时间”

主要是指文件的状态或属性的改变。对一个文件或目录进行mv chown chcgrp等操作后,change 时间会更新。ls -lc显示的是change time



注意几处地方:

1)解压一个打包的文件,解压出来的文件的mtime是文件最后被修改的time,这个时候ctime却能表示这个文件被解包

的时间,也就是在本机上被创建的时间(前提ctime没有被修改过),所以会看到mtime和ctime相差很大。使用cp命

令会修改源文件的三个time,想要保留原文件的时间属性可以使用-p选项,但是只能保留atime和mtime,ctime是一

样会被改变的。文件夹的三个time取决与文件夹里面文件的三个time。任何一个文件的atime,mtime,ctime的改变

都直接导致文件夹相应a、m、c time的改变。所以通过看用户home文件夹的time来判断用户的创建时间是不准确的。

一个用户的登录,在home目录创建文件,和退出登录等动作都是会改变home目录的三个time的。总结下linux没有办

法能确定一个文件的创建时间,只能通过各种间接的办法去推测大概的时间。linux推测用户创建时间的方法:(都

是不准确)同样的一个用户的创建时间也没有办法确定。


### C语言中的时间处理函数 C语言提供了多种用于时间和日期操作的标准库函数,主要定义在 `<time.h>` 头文件中。以下是几个常用的时间处理函数及其功能说明: #### `time()` 函数 `time_t time(time_t *timer);` 此函数返回当前日历时间,单位为秒,自1970年1月1日午夜(UTC)起计算。如果参数 `timer` 不为空,则将结果存储到其指向的位置[^3]。 ```c #include <stdio.h> #include <time.h> int main() { time_t now; now = time(NULL); printf("Current time as seconds since epoch: %ld\n", (long)now); return 0; } ``` #### `ctime()` 函数 `char *ctime(const time_t *timer);` 将由 `time()` 返回的值转换成人类可读的形式字符串表示,格式类似于 `"Wed Jan 02 02:48:00 2003"`[^3]。 ```c #include <stdio.h> #include <time.h> int main() { time_t raw_time; char* c_time_string; time(&raw_time); c_time_string = ctime(&raw_time); printf("The current local date and time is: %s", c_time_string); return 0; } ``` #### `localtime()` 和 `gmtime()` 函数 这两个函数分别用来获取本地时间和世界协调时间(UTC)。它们都接受一个 `time_t` 类型作为输入并返回一个指向 `struct tm` 的指针[^3]。 - **`localtime()`**: 将时间转化为当地时间。 - **`gmtime()`**: 转化为 UTC 时间。 ```c #include <stdio.h> #include <time.h> int main () { time_t rawtime; struct tm *info; time(&rawtime); info = localtime(&rawtime); printf("Local Time: %d-%d-%d %d:%d:%d\n", info->tm_year + 1900, info->tm_mon + 1, info->tm_mday, info->tm_hour, info->tm_min, info->tm_sec); return(0); } ``` #### `difftime()` 函数 `double difftime(time_t time_end, time_t time_beg);` 计算两个不同时间之间的差值,以秒为单位返回差异的结果[^3]。 ```c #include <stdio.h> #include <time.h> int main(){ time_t start, end; double elapsed; time(&start); sleep(5); /* 延迟五秒钟 */ time(&end); elapsed = difftime(end,start); printf ("Elapsed time: %.2f seconds.\n", elapsed ); return 0; } ``` #### `strftime()` 函数 允许按照指定格式输出日期和时间信息至缓冲区中去。它非常灵活,可以满足各种定制化的显示需求[^3]。 ```c #include <stdio.h> #include <time.h> int main(void){ time_t t = time(NULL); struct tm tm = *localtime(&t); char s[100]; strftime(s, sizeof(s), "%a %b %-d %Y %H:%M:%S %Z", &tm); puts(s); return 0; } ``` 以上就是一些常见的关于时间的操作方法以及相应的例子展示如何利用这些工具来完成特定的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值