设置文件的访问时间和修改时间纳秒级别)。
1.头文件
#include <fcntl.h> /* 定义了一些常量 AT_开头*/
#include <sys/stat.h>
2.函数原型
int utimensat(int dirfd, const char *pathname,const struct timespec times[2], int flags);
3.参数
dirfd目录文件描述符。如在当前目录则可以使用AT_FDCWD表示pathname是绝对路径。如果不在当前目录,则需要指定要修改的pathname的目录。
pathname要修改时间的文件路径。
times是一个包含两个 struct timespec 的数组,第一个表示访问时间,第二个表示修改时间可以将times任一数组元素的 tv_nsec 字段为如下数值:
⚫NULL这时会将访问时间和修改时间都设置为当前时间。
⚫UTIME_NOW则表示相应的时间戳设置为当前时间,此时忽略相应的 tv_sec 字段。
⚫UTIME_OMIT则表示相应的时间戳保持不变,此时忽略 tv_sec 字段。
flags行为控制。
⚫0默认值,不特殊处理符号链接或路径。
⚫AT_SYMLINK_NOFOLLOW修改符号链接本身的时间,而不是其指向的目标文件用于需要更新符号链接的情况。
⚫AT_EMPTY_PATH当路径为空时,允许操作当前目录或文件描述符,适用于一些特殊场景(如更新当前目录的时间)。
4.返回值
成功返回0,失败返回-1,并设置errno以指示返回错误类型 。
5.示例:(使用utimensat修改文件访问时间)
...
...
...
void update_file_time(const char *filename){
struct timespec times[2];
int i;
for (i=0; i<2; i++) {
times.tv_sec = time(NULL);
times.tv_nsec = 666;
}
if (utimensat(AT_FDCWD, filename, times, AT_SYMLINK_NOFOLLOW) == -1) {
perror("utimensat");
exit(EXIT_FAILURE);
}
printf("File time updated successfully.\n");
}
这里只测试了AT_FDCWD和AT_SYMLINK_NOFOLLOW,用法上面已经说明,这里不做过多赘述。

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Powered by Discuz! X3.5  © 2001-2013 Comsenz Inc.