Это может зависеть от того, в какой операционной системе вы работаете, и в какой файловой системе находится файл. Я предполагаю, что вы используете 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-битные временные метки будут свернуты), но, по-видимому, они не добавили дробные биты.
person
rob mayoff
schedule
03.03.2012