Как мне установить mtime символической ссылки в TCL?

#tcl #symlink #filemtime

#tcl #символическая ссылка #filemtime

Вопрос:

file mtime может использоваться для установки времени модификации файла. Но если это символическая ссылка, она установит mtime цели. Как мне установить mtime самой символической ссылки?

Ответ №1:

Безусловно, самым простым подходом будет запуск внешней команды:

 proc SetMtime {filename timestamp} {
    # A little bit of type enforcement; it's not necessary, but avoids potential trouble
    exec touch -h -t [expr {int($timestamp)}] [file normalize $filename]
}
  

Это потому, что Tcl не предоставляет никакого собственного доступа к utimensat(2) системному вызову (или его оболочке lutimes(3) ). Вы могли бы создавать свои собственные функции доступа в расширении Tcl (либо напрямую, либо с помощью Critcl или SWIG), но для случайной установки одной ссылки проще всего вызвать touch с -h помощью опции.

Комментарии:

1. Моя причина для изучения этого отчасти заключается в -h том, что он недоступен во всех реализациях touch .

2. Да, но в операционных системах, где она отсутствует, это, вероятно, потому, что базовая ОС также не поддерживает эту функцию. На данный момент на самом деле нет никакого обходного пути.