Это может зависеть от того, в какой операционной системе вы находитесь, и на какой тип файловой системы находится файл.Я предполагаю, что вы используете iOS (в этом случае вы используете любую файловую систему, которую использует iOS).
Системный вызов stat
возвращает информацию о файле, включая несколько временных меток, в структуреназывается struct stat
.Структура хранит каждую метку времени как struct timespec
.struct timespec
содержит поле секунд tv_sec
и поле наносекунд tv_nsec
.Таким образом, теоретически вы можете получить временные метки с наносекундным разрешением для своих файлов.
На практике похоже, что вы получаете только временные метки с вторым разрешением.Я протестировал этот код:
struct stat sb;
stat([NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"].UTF8String, &sb);
на моем iPhone 4S под управлением iOS 5.0.1 и получил такой результат:
(gdb) p sb
$1 = {
st_dev = 234881033,
st_mode = 33188,
st_nlink = 1,
st_ino = 11265454,
st_uid = 501,
st_gid = 20,
st_rdev = 0,
st_atimespec = {
tv_sec = 1330753666,
tv_nsec = 0
},
st_mtimespec = {
tv_sec = 1330753664,
tv_nsec = 0
},
st_ctimespec = {
tv_sec = 1330753664,
tv_nsec = 0
},
st_birthtimespec = {
tv_sec = 1330417559,
tv_nsec = 0
},
st_size = 830,
st_blocks = 8,
st_blksize = 4096,
st_flags = 0,
st_gen = 0,
st_lspare = 0,
st_qspare = {0,
0}
}
Вы можете видеть, что все поля tv_nsec
равны 0. Кажется маловероятным совпадение.
Исторически HFS Plus (собственная файловая система Mac OS X, вероятно, также используемая в iOS) сохраняла каждую временную метку в 32-разрядном целом числе без знака, представляющем количество секунд.с полуночи 1 января 1904 г. по Гринвичу.(См. Техническое примечание TN1150 .) Предположительно, в какой-то момент они расширили временные метки до 64 бит (или сделают это до 2040 года, когда 32-битные временные метки будут обернуты), но, очевидно, они не добавили никакихдробные биты.