utime() - Unix 和 Linux 系统调用
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于 TP  

utime() - Unix 和 Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

utime、utimes - 更改 inode 的访问和/或修改时间

语法

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

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

#include <sys/time.h>

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

描述

utime() 将由 filename 指定的 inode 的访问和修改时间分别更改为 bufactimemodtime 字段。

如果 buf 为 NULL,则将文件的时间戳设置为当前时间。

在以下情况下允许更改时间戳:进程具有相应的权限(Linux:具有 CAP_FOWNER 功能),或者有效用户 ID 等于文件的所有者 ID,或者 buf 必须为 NULL 并且进程对文件具有写权限。

utimbuf 结构如下所示:

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

函数 utime() 允许以 1 秒的分辨率指定时间戳。函数 utimes() 类似,但允许以 1 微秒的分辨率指定时间戳。此处 times[0] 指访问时间,times[1] 指修改时间。

timeval 结构如下所示:

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

返回值

成功时,返回 0。错误时,返回 -1,并且 errno 被适当地设置。

错误

标签描述
EACCES path 前缀中的某个目录的搜索权限被拒绝(另请参见 path_resolution(2)),或者 buf 为 NULL 并且进程没有权限更改时间戳(请参见上文)。
ENOENT filename 不存在。
EPERM buf 不为 NULL 并且进程没有权限更改时间戳。
EROFS path 位于只读文件系统上。

备注

Linux 不允许更改不可变文件的时间戳,也不允许将时间戳设置为追加文件以外的其他时间。

在 libc4 和 libc5 中,utimes() 只是 utime() 的包装器,因此不允许亚秒级分辨率。

POSIX.1-2001 将 utimes() 标记为传统功能,这很奇怪,因为它提供了比 utime() 更多的功能。

缺陷

Linux 没有仔细区分 EACCES 和 EPERM 错误返回。另一方面,POSIX.1-2001 在其 utimes() 错误描述中存在缺陷。

符合标准

utime():SVr4、POSIX.1-2001。

utimes():4.3BSD

参见



previous next Printer Friendly

广告


  

广告



广告