4.20 函数futimens、utimenstat和utimes

    一个文件的访问和修改时间可以用以下几个函数更改。futimens和utimenstat函数可以指定纳秒级精度的时间戳。用到的数据结构是与stat函数族相同的timespec结构(见4.2节)。

#include <sys/stat.h>

int  futimens(int fd, const struct timespec times[2]);

int utimensat(int fd, const char *path, const struct timesepc times[2], int flag);

                                                                                两个函数返回值:若成功,返回0;若出错,返回-1.

    这两个函数的times数组参数的第一个元素包含访问时间,第二个元素包含修改时间。这两个时间值是日历时间,如1.10节所述,这是自特定使劲(1970年1月1日00:00:00)以来所经过的秒数。不足秒的部分用纳秒表示。

    时间戳可以按下列4中方式之一进行指定。

(1)如果times参数是一个空指针,则访问时间和修改时间两者都设置为当前时间。

(2)如果times参数指向两个timespec结构的数组,任一数组元素的tv_nsec字段的值为UTIME_NOW,相应的时间戳就设置为当前时间,忽略相应的tv_sec字段。

(3)如果times参数指向两个timespec结构的数组,任一数组元素的tv_nsec字段的值为UTIME_OMIT,相应的时间戳保持不变,忽略相应的tv_nsec字段。

(4)如果times参数指向两个timespec结构的数组,且tv_nsec字段的值既不是UTIME_NOW也不是UTIME_OMIT,在这种情况下,相应的时间戳设置为相应的tv_sec和tv_nsec字段的值。

    执行这些函数所要求的优先权取决于times参数的值。

  • 如果times是一个空指针,或者任一tv_nsec字段设为UTIME_NOW,则进程的有效用户ID必须等于该文件的所有者ID;进程对该文件必须具有写权限,或者进程是一个超级用户进程。
  • 如果times是非空指针,并且任一tv_nsec字段的值既不是UTIME_NOW也不是UTIMW_OMIT,则进程的有效用户ID必须等于该文件的所有者ID,或者进程必须是一个超级用户进程。对文件只具有写权限是不够的。
  • 如果times是非空指针,并且两个tv_nsec字段的值都为UTIME_OMIT,就不执行任何的权限检查。

    futimens函数需要打开文件来更改它的时间,utimenstat函数提供了一种使用文件名更改文件时间的方法。pathname参数是相对于fd参数进行计算的,fd要么是打开目录的文件描述符,要么设置为特殊值AT_FDCWD(强制通过相对于调用进程的当前目录计算pathname)。如果pathname指定了绝对路径,那么fd参数被忽略。

    utimenstat的flag参数可用于进一步修改默认行为。如果设置了AT_SYMLINK_NOFOLLOW标志,则符号链接本身的时间就会修改(如果路径名指向符号链接)。默认的行为是跟随符号链接,并把文件的时间改成符号链接的时间。

    futimens和utimenstat函数都包含在POSIX.1中,第3个函数utimes包含在Single UNIX Specification的XSI扩展选项中。

#include <sys/time.h>

int  utimes (const char *pathname, const struct timeval tiems[2]);

                                                                                                                                                函数返回值:若成功,返回0;若出错,返回-1.

    utimes函数对路径名进行操作。times参数是指向包含两个时间戳(访问时间和修改时间元素的数组的指针,两个时间戳是用秒和微秒表示的)。

    注意,我们不能对状态更改时间st_ctim(i节点最近被修改的时间)执行一个值,因为调用utimes函数时,此字段会被自动更新。

    在某些UNIX版本中,touch(l)命令使用这些函数中的某一个。另外,标准归档程序tar(l)和cpio(l)可选地调用这些函数,以便将一个文件的时间值设置为将它归档时保存的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值