Где находится отметка времени в файле?
Это не в данных файла. Именно в метаданных файловая система ассоциируется с файлом. Например, для файловых систем FAT это находится в записи каталога файла (структура на диске, которая содержит имя файла, его размер, где находится первый кластер данных файла на диске и т. Д.). Чтобы быть более конкретным, люди должны точно знать, какая это файловая система.
Чтобы изменить метку времени в сборке, вам нужно знать, какую метку времени вы хотите изменить (для большинства "Unix-подобных" систем есть три метки времени - время создания, время доступа и время модификации) и, возможно, как вы хотите изменить отметку времени (установка времени доступа или времени изменения на «сейчас» может быть сделано путем доступа / изменения данных файла); и в какой среде будет работать ваш код.
Например:
a) если ваш код выполняется на компьютере 80x86 с доступом к службам BIOS, вам потребуется написать собственный код для обработки любого разбиения на устройстве, а также прочитать и проанализировать структуры файловой системы (записи каталога, так далее); использование сервисов BIOS для чтения / записи сырых секторов диска.
b) если ваш код работает на голом сервере ARM с доступом к сервисам UEFI, то вам нужно будет написать собственный код для чтения и анализа структур файловой системы (записей каталогов и т. Д.); использование сервисов UEFI для чтения / записи необработанных секторов тома.
в) если вы работаете в среде, похожей на Linux (включая WSL в Windows), вы, вероятно, в конечном итоге либо будете использовать функции в общей библиотеке (open()
, read()
, write()
, если Вы хотите установить время доступа и / или время модификации на «сейчас»); функция в разделяемой библиотеке (utimes()
, если вы хотите изменить время модификации или время доступа на что-либо, отличное от «сейчас»); или, может быть, вообще не в состоянии это сделать (если вы хотите изменить время создания на что-то иное, чем «сейчас»).
d) если вы работаете в среде, подобной Windows (включая Wine в ОС на базе Linux), вы, вероятно, в конечном итоге либо будете использовать функции в динамически связанной библиотеке (open()
, read()
, write()
, если вы хотите установить время доступа и / или время модификации на «сейчас»); или одна функция в динамически связанной библиотеке (SetFileTime()
, если вы хотите изменить время создания, время изменения или время доступа).
e) если вы работаете на процессоре MIPS, встроенном в Ethernet-маршрутизатор, и хотите использовать сеть для изменения временных меток файла на «общей папке Windows» удаленного компьютера, то вам, вероятно, потребуется изучить много о том, как управлять оборудованием маршрутизатора (как отправлять / получать данные с использованием портов Ethernet), а также много о протоколах SMB и CIFS; и вы, вероятно, не сможете ничего сделать, кроме как изменить время доступа к файлу или время изменения на «сейчас».