lienhua34
2014-09-16

1 文件的时间

每个文件都有三个时间字段,如表 1 所示。

表 1: 文件的三个时间字段
说明 字段
st_atime 文件数据的最后访问时间
st_mtime 文件数据的最后修改时间
st_ctime i 节点状态的最后更改时间

最后修改时间是文件内容最后一次被修改的时间。更改状态时间是该文件的 i 节点最后一次被修改的时间。

2 utime 函数

utime 函数提供了对文件最后访问时间和最后修改时间的更改功能。

#include <utime.h>

int utime(const char *pathname, const struct utimbuf *times);

返回值:若成功则返回0,若出错则返回-1.

其中 utimbuf 结构的定义如下,

struct utimbuf {time_t actime; /* access time */time_t modtime; /* modification time */
};

此结构中的两个时间值是日历时间,即自 1970 年 1 月 1 日 00:00:00 以来国际标准时间所经过的秒数。

此函数的操作以及所需要的权限取决于 times 参数是否是 NULL。

• 如果 times 参数是一个空指针,则访问时间和修改时间两者都被设置为当前时间。所需要的权限:进程的有效用户 ID 必须等于该文件的所有者 ID,或者进程对该文件必须具有写权限。

• 如果 times 是非空指针,则访问时间和修改时间被设置为 times 所指向的结构中的值。所需要的权限:进程的有效用户 ID 必须等于该文件的所有者 ID,或者进程必须是一个超级用户进程。

例子:

下面程序将文件 foo 的访问时间和修改时间都更改为当前时间。对于文件 bar,则先使用 stat 函数获取该文件的访问时间和修改时间,然后使用O_TRUNC 选项调用 open 函数打开文件 bar(会导致该文件的访问时间和修改时间都发生变更),最后将该文件的这两个时间还原为调用 stat 函数时的值。

#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <utime.h>
#include <errno.h>
#include <string.h>
int
main(void)
{int i, fd;struct stat statbuf;struct utimbuf timebuf;if (utime("foo", NULL) < 0) {printf("utime foo error: %s\n", strerror(errno));exit(-1);}if (stat("bar", &statbuf) < 0) {printf("stat error: %s\n", strerror(errno));exit(-1);}if ((fd = open("bar", O_RDWR | O_TRUNC)) < 0) {printf("open error: %s\n", strerror(errno));exit(-1);}close(fd);timebuf.actime = statbuf.st_atime;timebuf.modtime = statbuf.st_mtime;if (utime("bar", &timebuf) < 0) {printf("utime bar error: %s\n", strerror(errno));exit(-1);}exit(0);
}

编译该程序,生成文件 utimedemo,然后运行该文件,

lienhua34:demo$ gcc -o utimedemo utimedemo.c
lienhua34:demo$ ls -l foo bar        查看文件最后修改时间
-rw-r--r-- 1 lienhua34 lienhua34 7 9月 15 20:02 bar
-rw-rwSr-- 1 lienhua34 lienhua34 0 9月 3 23:51 foo
lienhua34:demo$ ls -lu foo bar       查看文件最后访问时间
-rw-r--r-- 1 lienhua34 lienhua34 7 9月 16 21:13 bar
-rw-rwSr-- 1 lienhua34 lienhua34 0 9月 3 23:51 foo
lienhua34:demo$ date
2014年 09月 16日 星期二 21:14:28 CST
lienhua34:demo$ ./utimedemo
lienhua34:demo$ ls -l foo bar         查看文件最后修改时间-rw-r--r-- 1 lienhua34 lienhua34 0 9月 15 20:02 bar
-rw-rwSr-- 1 lienhua34 lienhua34 0 9月 16 21:14 foo
lienhua34:demo$ ls -lu foo bar        查看文件最后访问时间-rw-r--r-- 1 lienhua34 lienhua34 0 9月 16 21:13 bar
-rw-rwSr-- 1 lienhua34 lienhua34 0 9月 16 21:14 foo

ls 命令按这个三个时间值中的一个排序进行显示。系统默认(用 -l 或-t 选项调用时),它按文件的最后修改时间的先后排序显示。-u 选项使其用最后访问时间进行排序,-c 选项则使其用更改状态时间进行排序。

(done)

转载于:https://www.cnblogs.com/lienhua34/p/3975894.html

UNIX环境编程学习笔记(11)——文件I/O之文件时间以及 utime 函数相关推荐

  1. UNIX环境编程学习笔记(6)——文件I/O之判断文件类型

    lienhua34 2014-09-01 1 文件类型 我们平时最常接触的文件类型有普通文件(regular file)和目录(di-rectory file),但是 UNIX 系统提供了多种文件类型 ...

  2. UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习

    在"进程控制三部曲"中,我们学习到了 fork 是三部曲的第一部,用于创建一个新进程.但是关于 fork 的更深入的一些的东西我们还没有涉及到,例如,fork 创建的新进程与调用进 ...

  3. UNIX环境编程学习笔记(21)——进程管理之获取进程终止状态的 wait 和 waitpid 函数...

    lienhua34 2014-10-12 当一个进程正常或者异常终止时,内核就向其父进程发送 SIGCHLD信号.父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用的函数(信号处理程序).对于 ...

  4. UNIX环境编程学习笔记(1):——出错处理errno

    lienhua34 2014 年 8 月 24 日 1. errno变量 文件 <errno.h> 中定义了符号 errno 以及可以赋予它的各种常量,这些常量都是以字符 E 开头.例如, ...

  5. UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数

    lienhua34 2014-11-05 sigaction 函数跟 signal 函数一样,用于设置信号处理函数.此函数是用于取代 UNIX 早期版本使用的 signal 函数.UNIX 早期版本的 ...

  6. 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)

    文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...

  7. UNIX网络编程学习笔记(代码超详细解析)(持续更新)

    1. 其他函数准备 1. TCP 回射服务器程序: str_echo 函数 #include "unp.h"void str_echo(int sockfd) {ssize_t n ...

  8. Unix网络编程学习笔记之第11章 名字与地址转换

    一. 域名系统(DNS) 1. 简介 DNS主要用于主机名和IP地址之间的映射. 主机名可以是简单的名字ljm,也可以是全限定域名ljm.localdomainbaidu.com等. 2.资源记录 D ...

  9. 2021版!万字UNIX网络编程学习笔记(套接字篇)

    目录 1.一个简单的时间获取服务器的程序 2.套接字篇 2.1 套接字简介 2.2 套接字中常用的函数 2.3 基本TCP套接字编程 2.3.1.socket函数 2.3.2 connect函数 2. ...

最新文章

  1. 单片机程序100-300例(付注释详解)
  2. oracle省市表,省市之一 创建全国省市Sql表
  3. python绘制数学三维图
  4. 纳米片晶体管是摩尔定律的下一步,也许是最后一步!
  5. EBS默认的登录账户和密码
  6. MS CRM 2011中,对于多实体数据文件的导入
  7. 阿里云linux绑定域名
  8. batchplot3.5.9如何使用_VirtualBox中安装的Windows XP如何使用USB3.0
  9. pip/pip3 install 报错 “Could not find a version that satisfies the requriement xxx” 的解决方法
  10. 解决vue中axios同步的问题
  11. x11获得窗口名的代码
  12. 与孩子一起学编程10章
  13. CocosCreator代码混淆加密
  14. 选择日期弹框html,JS——点击文本框弹出选择日期表格
  15. 2015061906 - firebug安装和下载(2)
  16. matlab 另存为excel_将matlab数据保存为excel文件
  17. 设置电脑定时开机、定时关机
  18. 数据分析师常见的十道面试题目
  19. 【安装】nodesj的addon模块配置使用报错处理
  20. 嵌入式linux安装dropbear

热门文章

  1. 编写实现atoi函数
  2. Python串行运算、并行运算、多线程、多进程对比实验
  3. gin获取Get + Post 混合
  4. 指针数组、数组指针、数组的区别与联系
  5. <X86汇编语言:实模式到保护模式>四十四 协同式任务切换
  6. springboot-web开发(rest风格支持)
  7. 特征值 与特征向量(机器学习算法原理与实践)
  8. 单个APP接入多个微信支付宝支付的一种解决方案
  9. 绝不能错过的10款最新OpenStack网络运维 监控工具
  10. 高性能js之js文件的加载与解析