1.futimens,utimensat函数原型
#include<sys/stat.h>
int futimens(int fd, const struct timespec times[2]);
int utimensat(int fd, const char* path, const struct time spec times[2], int flag);
成功返回0,失败返回-1.
2.futimens,utimensat函数说明
两个函数的times结构体数组,第一个指向access time,第二个指向modification time。
时间戳有四种设置方式:
1.如果时间参数times是空指针。那么两个时间都被设置为当时时间。
2.如果时间参数times指向timespec结构体,任何一个tv_nsec是UTIME_NOW,那么相应的时间戳被设置为当前时间,其tv_sec忽略。
3.如果时间参数times指向timespec结构体,任何一个tv_nsec是UTIME_OMIT,那么相应时间戳不修改,tv_sec忽略。
4.如果时间参数times指向timespec结构体,并且两个tv_nsec既不是UTIME_NOW,也不是UTIME_OMIT,那么时间戳被设置为指向的结构体时间。
两个函数需要的权限:
1.如果时间参数为空指针或者tv_nsec为UTIME_NOW,那么进程有效用户ID必须等于文件所有者;或者进程对文件有写权限;或者进程是超级用户进程。
2.如果时间参数不是空指针并且tv_nsec不是UTIME_NOW和UTIME_OMIT,那么进程有效用户ID必须等于文件所有者;或者进程是超级用户进程。仅仅有写权限是不够的。
3.如果时间参数不是空指针,并且两个tv_nsec都是UTIME_OMIT,那么不需要权限检查。
3.utimes函数
int utimes(const char* path, const struct timeval times[2]);
我们并不能修改st_ctm--inode状态修改时间。当utimes被调用后,这个时间被自动更新。