Access/Modify/Change时间

    这里,我们解释Access/Modify/Change时间是什么时间?如何修改Access/Modify/Change时间?

    1.Access/Modify/Change时间是什么时间?

首先我们先用stat命令查看一个文件的这三个时间。


接下来,我们来解释一下这三个时间。

Access:文件最近一次被访问的时间,当编辑器打开文件时,使用cat,more,less,grep,sed读取文件内容将会刷新。



当我们读取file的时候,可以发现Access时间确实改变了,改变为最近一次读取文件的时间

Change:文件属性最近一次被修改的时间,对一个文件或则目录执行mv,chmod,chgrp命令,将会刷新Change的。


当我们用chmod命令改变文件file的属性时,Change的时间发生了变化。

Modify:文件内容最近一次被修改的时间;当修改文件内容时Modify的时间将会刷新


当我们改变文件内容的时候,发现不仅Modify发生了改变,Change也发生了改变,而Acess没变。

接下来,我们来看一下用vim编辑文件时,会出现什么状况。


我们发现当用vim编辑文件时,Access/Modify/Change都发生了改变。

总结:

      Access:文件最近一次被访问的时间,使用cat,more,less,grep,sed读取文件内容将会刷新

      Modify:文件内容最近一次被修改的时间;当修改文件内容时Modify的时间将会刷新。

      Change:文件属性最近一次被修改的时间,对一个文件或则目录执行mv,chmod,chgrp命令,将会刷新Change的 。

       当读取文件时,Access time 改变,而 Modify time 、Change time 不变。
       当修改文件内容时,Modify time 、Change time 会改变,Access time 不一定改变。(用vim编辑时Access会改变)
      当修改文件权限属性时,Change time 改变,而 Access time 、 Modify time 不变。

2.如何修改Access/Modify/Change时间?

我们通过touch指令来修改时间,接下来我们来看这些指令

touch -a file:修改Access的时间为当前系统时间,Change是当前系统时间


touch -m file:Modify被修改成当前系统时间,Change为当前系统时间


touch -c file:Access/Modify被修改成当前系统时间,Change为当前系统时间


touch -d 2018-1-23 file:Access/Modify被修改成指定的时间2018-1-23,Change为当前系统时间

touch -a -d  2019-7-23 file:将Access修改为指定时间2019-7-23,Modify不变,Change为当前系统时间


touch -m -d 2010-3-24 file:Modify被修改为指定时间2010-3-24,Access不变,Change为当前系统时间


touch -c -d 2014-6-26 file:Access/Modify被修改为指定时间2014-6-26,Change为当前系统时间


总结:

touch -a 是将Access修改为当前系统时间,touch -a -d 是将Access修改为指定的时间

touch -m是将Modify修改为当前系统时间,touch -m -d是将Modify修改为指定的时间

touch -c是将Access/Modify修改为当前系统时间,touch -c -d是将Access/Modify修改为指定的时间

使用以上所有指令时,Change都被修改为当前系统时间。

### sys/time.h 头文件的使用说明 `sys/time.h` 是 C 语言标准库中的一个重要头文件,主要用于时间操作以及高精度计时功能。以下是关于该头文件的相关信息: #### 1. 主要结构体定义 `sys/time.h` 定义了两个重要的数据结构 `struct timeval` 和 `struct timezone`。 - **`struct timeval`**: 用于表示秒级和微秒级的时间间隔。 ```c struct timeval { time_t tv_sec; /* 秒 */ suseconds_t tv_usec; /* 微秒 */ }; ``` 此结构通常用于精确的时间测量或延迟控制[^2]。 - **`struct timezone`**: 已逐渐被淘汰,在现代 POSIX 系统中不再推荐使用。 ```c struct timezone { int tz_minuteswest; /* 当前时区距离格林尼治的分钟差 */ int tz_dsttime; /* 是否处于夏令时 */ }; ``` #### 2. 常见函数声明 `sys/time.h` 提供了一些与时间相关的函数接口,其中最常用的为 `gettimeofday()` 函数。 - **`int gettimeofday(struct timeval *tv, struct timezone *tz)`**: 获取当前时间和时区信息并存储到指定的 `struct timeval` 和 `struct timezone` 变量中。如果不需要时区信息,则可以将第二个参数设置为 NULL。 返回值: - 成功:返回 0; - 错误:返回 -1 并设置 errno。 示例代码如下: ```c #include <stdio.h> #include <sys/time.h> int main() { struct timeval tv; if (gettimeofday(&tv, NULL) == 0) { printf("Current Time: %ld seconds and %ld microseconds\n", tv.tv_sec, tv.tv_usec); } else { perror("Error"); } return 0; } ``` #### 3. 关联其他头文件 `sys/time.h` 还可能依赖于 `<time.h>` 的部分定义。例如,它会通过宏 `__need_time_t` 来仅引入 `time_t` 类型的定义[^1]。因此,在某些情况下,即使未显式包含 `<time.h>`,也可能间接获得其部分内容的支持。 --- ### 文件状态统计 (`stat`) 中的时间字段 除了上述内容外,`sys/time.h` 所涉及的时间概念还经常与其他系统调用配合使用,比如 `stat` 或者 `fstat` 函数。这些函数提供了文件的状态信息,其中包括三个重要时间戳字段[^3]: - **`st_atime`**: 上次访问时间Access Time) - **`st_mtime`**: 上次修改时间Modify Time),指文件内容最后被更改的时间 - **`st_ctime`**: 上次变更时间Change Time),指文件元数据(如权限、链接数等)最后被改变的时间 注意:以上字段均为 `time_t` 类型,可以通过 `localtime()` 或 `gmtime()` 将其转换为人可读的形式。 --- ### 总结 综上所述,`sys/time.h` 不仅为开发者提供了一个简单易用的方式来处理亚秒级别的定时需求,同时也作为许多底层 API 的基础组件存在。对于需要精准计时的应用场景而言,它是不可或缺的一部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值