- 主题:修改文件的创建日期要用哪个 API?
utimensat() 只能修改 modified 和 access 两个时间,不能修改创建时间。
想在备份的时候把创建日期也备份起来。
顺便问一下,utimensat() 的参数是结构体 struct timespec,其中的 tv_nsec 字段转换秒小数点后面的数字吗?
double t = seconds_since_epoch();
struct timespec times[2];
times[0].tv_sec = (uint) t;
times[0].tv_nsec = (t - (uint) t * 1.0) * 1000 * 1000 * 1000;
这样写对吗?
找了 stackoverflow 上面都是从文件系统直接取值,而没有赋值的示例。
--
FROM 47.243.39.*
什么叫创建日期?
【 在 hgoldfish (老鱼) 的大作中提到: 】
: utimensat() 只能修改 modified 和 access 两个时间,不能修改创建时间。
: 想在备份的时候把创建日期也备份起来。
: 顺便问一下,utimensat() 的参数是结构体 struct timespec,其中的 tv_nsec 字段转换秒小数点后面的数字吗?
: ...................
--
FROM 113.108.77.*
文件有创建日期、修改日期和最后访问日期三个时间戳。
【 在 JulyClyde (我的月份又来了) 的大作中提到: 】
: 什么叫创建日期?
--
FROM 47.243.39.*
你说的创建日期应该是change time这个时间戳吧?如果是找修改它的标准的api,似乎
是没有的。你可以看看内核源码的fs/attr.c中的notify_change:
attr->ia_ctime = now;
if (!(ia_valid & ATTR_ATIME_SET))
attr->ia_atime = now;
else
attr->ia_atime = timestamp_truncate(attr->ia_atime, inode);
ctime是直接赋值为now了,根本不让改,所以应该是没有标准api来修改。
你那个tv_nsec的算法是错误的,可以通过clock_gettime获得精确到纳秒的当前时间。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: utimensat() 只能修改 modified 和 access 两个时间,不能修改创建时间。
: 想在备份的时候把创建日期也备份起来。
: 顺便问一下,utimensat() 的参数是结构体 struct timespec,其中的 tv_nsec 字段转换秒小数点后面的数字吗?
: ...................
--
修改:gameplayer FROM 111.199.187.*
FROM 111.199.187.*
ctime是change time吧,不是create time
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 文件有创建日期、修改日期和最后访问日期三个时间戳。
--
FROM 113.108.77.*
创建时间改了的话 这个标签还有什么意义?
【 在 hgoldfish 的大作中提到: 】
: utimensat() 只能修改 modified 和 access 两个时间,不能修改创建时间。
: 想在备份的时候把创建日期也备份起来。
: 顺便问一下,utimensat() 的参数是结构体 struct timespec,其中的 tv_nsec 字段转换秒小数点后面的数字吗?
: ...................
--
FROM 223.104.42.*
没有 change time 吧。是 mtime, modified.
ctime 确实是 created time. 但是目前看起来没有 API 可以修改。
【 在 JulyClyde (我的月份又来了) 的大作中提到: 】
: ctime是change time吧,不是create time
--
FROM 47.243.39.*
我看 win32api 有这个功能,所以问一下,unix 底下对应的 API 是啥。
BOOL SetFileTime(
[in] HANDLE hFile,
[in, optional] const FILETIME *lpCreationTime,
[in, optional] const FILETIME *lpLastAccessTime,
[in, optional] const FILETIME *lpLastWriteTime
);
【 在 Qlala (Qlala) 的大作中提到: 】
: 创建时间改了的话 这个标签还有什么意义?
--
FROM 47.243.39.*
ctime是change time, creation是btime,man statx或者man inode:
/* The following fields are file timestamps */
struct statx_timestamp stx_atime; /* Last access */
struct statx_timestamp stx_btime; /* Creation */
struct statx_timestamp stx_ctime; /* Last status change */
struct statx_timestamp stx_mtime; /* Last modification */
不过btime在大部分Linux文件系统下都是不支持的:
The btime timestamp was not historically present on UNIX systems and is not currently supported by most Linux filesystems.
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 没有 change time 吧。是 mtime, modified.
: ctime 确实是 created time. 但是目前看起来没有 API 可以修改。
--
修改:gameplayer FROM 222.128.5.*
FROM 222.128.5.*
原来如此!
【 在 gameplayer (*.*) 的大作中提到: 】
: ctime是change time, creation是btime,man statx或者man inode:
: /* The following fields are file timestamps */
: struct statx_timestamp stx_atime; /* Last access */
: ...................
--
FROM 47.243.39.*