utimes() - Unix,Linux系统调用
Tutorials Point


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

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论论坛     关于TP  

utimes() - 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 */
};

返回值

成功时,返回零。出错时,返回-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

广告


  

广告



广告