UNIX环境编程学习笔记(11)——文件I/O之文件时间以及 utime 函数
lienhua34
2014-09-16
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 函数相关推荐
- UNIX环境编程学习笔记(6)——文件I/O之判断文件类型
lienhua34 2014-09-01 1 文件类型 我们平时最常接触的文件类型有普通文件(regular file)和目录(di-rectory file),但是 UNIX 系统提供了多种文件类型 ...
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
在"进程控制三部曲"中,我们学习到了 fork 是三部曲的第一部,用于创建一个新进程.但是关于 fork 的更深入的一些的东西我们还没有涉及到,例如,fork 创建的新进程与调用进 ...
- UNIX环境编程学习笔记(21)——进程管理之获取进程终止状态的 wait 和 waitpid 函数...
lienhua34 2014-10-12 当一个进程正常或者异常终止时,内核就向其父进程发送 SIGCHLD信号.父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用的函数(信号处理程序).对于 ...
- UNIX环境编程学习笔记(1):——出错处理errno
lienhua34 2014 年 8 月 24 日 1. errno变量 文件 <errno.h> 中定义了符号 errno 以及可以赋予它的各种常量,这些常量都是以字符 E 开头.例如, ...
- UNIX环境编程学习笔记(25)——信号处理进阶学习之 sigaction 函数
lienhua34 2014-11-05 sigaction 函数跟 signal 函数一样,用于设置信号处理函数.此函数是用于取代 UNIX 早期版本使用的 signal 函数.UNIX 早期版本的 ...
- 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)
文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...
- UNIX网络编程学习笔记(代码超详细解析)(持续更新)
1. 其他函数准备 1. TCP 回射服务器程序: str_echo 函数 #include "unp.h"void str_echo(int sockfd) {ssize_t n ...
- Unix网络编程学习笔记之第11章 名字与地址转换
一. 域名系统(DNS) 1. 简介 DNS主要用于主机名和IP地址之间的映射. 主机名可以是简单的名字ljm,也可以是全限定域名ljm.localdomainbaidu.com等. 2.资源记录 D ...
- 2021版!万字UNIX网络编程学习笔记(套接字篇)
目录 1.一个简单的时间获取服务器的程序 2.套接字篇 2.1 套接字简介 2.2 套接字中常用的函数 2.3 基本TCP套接字编程 2.3.1.socket函数 2.3.2 connect函数 2. ...
最新文章
- 单片机程序100-300例(付注释详解)
- oracle省市表,省市之一 创建全国省市Sql表
- python绘制数学三维图
- 纳米片晶体管是摩尔定律的下一步,也许是最后一步!
- EBS默认的登录账户和密码
- MS CRM 2011中,对于多实体数据文件的导入
- 阿里云linux绑定域名
- batchplot3.5.9如何使用_VirtualBox中安装的Windows XP如何使用USB3.0
- pip/pip3 install 报错 “Could not find a version that satisfies the requriement xxx” 的解决方法
- 解决vue中axios同步的问题
- x11获得窗口名的代码
- 与孩子一起学编程10章
- CocosCreator代码混淆加密
- 选择日期弹框html,JS——点击文本框弹出选择日期表格
- 2015061906 - firebug安装和下载(2)
- matlab 另存为excel_将matlab数据保存为excel文件
- 设置电脑定时开机、定时关机
- 数据分析师常见的十道面试题目
- 【安装】nodesj的addon模块配置使用报错处理
- 嵌入式linux安装dropbear