遵循规范

utime():SVr4,POSIX.1-2001。 POSIX.1-2008将utime()标记为过时。

utimes():4.3BSD,POSIX.1-2001。

备注

Linux不允许更改不可变文件上的时间戳,或者将仅附加文件上的时间戳设置为当前时间以外的其他时间戳。

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

UTIME - Linux手册页

Linux程序员手册 第2部分
更新日期: 2017-09-15

名称

utime,utimes-更改文件的上次访问和修改时间

另外参见

chattr(1),touch(1),futimesat(2),stat(2),utimensat(2),futimens(3),futimes(3),inode(7)

错误说明

EACCES
对path的路径前缀中的目录之一的搜索许可被拒绝(另请参见path_resolution(7))。
EACCES
times为NULL,调用者的有效用户ID与文件的所有者不匹配,调用者没有对该文件的写访问权,并且该调用者没有特权(Linux:既不具有CAP_DAC_OVERRIDE也不具有CAP_FOWNER能力)。
ENOENT
文件名不存在。
EPERM
times不为NULL,则调用者的有效UID与文件的所有者不匹配,并且调用者没有特权(Linux:不具有CAP_FOWNER功能)。
EROFS
路径驻留在只读文件系统上。

语法

#include <sys/types.h>
#include <utime.h>

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

#include <sys/time.h>

int utimes(const char *filename, const struct timeval times[2]);

说明

注意:现代应用程序可能更喜欢使用utimensat(2)中描述的接口。

utime()系统调用将文件名指定的索引节点的访问和修改时间分别更改为actime和modtime的时间字段。

如果times为NULL,则文件的访问和修改时间将设置为当前时间。

在以下情况下允许更改时间戳:进程具有适当的特权,或者有效的用户ID等于文件的用户ID,或者时间为NULL,并且进程具有文件的写许可权。

utimbuf结构为:

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

utime()系统调用允许以1秒的分辨率指定时间戳。

utimes()系统调用与此类似,但是times参数引用的是数组而不是结构。此数组的元素是timeval结构,用于指定时间戳的精度为1微秒。时间结构为:

struct timeval {
    long tv_sec;        /* seconds */
    long tv_usec;       /* microseconds */
};

times [0]指定新的访问时间,times [1]指定新的修改时间。如果times为NULL,则类似于utime(),文件的访问和修改时间设置为当前时间。

日期:2019-08-20 17:59:36 来源:oir作者:oir