Почему'.' отображен 'ls'?

#include <time.h>
#include <stdio.h>

int main() {
  time_t t = (time_t)(1L << (sizeof(time_t)*8 - 9));
  printf("%d\n", sizeof(time_t));
}

это должно быть 1 вместо 9, но ctime не обрабатывает большую дату:

8 - Sun Jun 13 07:26:08 1141709097

Моя система (64 бита, конечно) время может выполнить даже 1 миллион лет больше. Решение состоит в том, чтобы обновить системы к 64 битам.

Выгода - то, что программы не могут обработать его. Особенно старый, propertary и не сохраняемый. Devs привыкли к следующим фактам:

  • int32 бита (на самом деле, они сохраняются как 32 бита в 64-разрядных системах среди других, потому что предполагалось, что они всегда - 32 бита),
  • Большинство типов (такой как time_t) может безопасно быть литым на int

В популярном программном обеспечении FLOSS обе вещи, вероятно, не пройдут через 'многие глаза' обзор. На менее популярном и propertary это будет largly зависеть от автора.

Я предполагаю на свободном *, отклоняют мир, 2038 станет 'незамеченным', в то время как я действительно ожидаю проблемы на "propertary" платформах (т.е. те, которые имеют большое количество propertary программного обеспечения) - особенно, если часть crutial части не будет сохраняться.

7
13.04.2017, 15:36
2 ответа

Причина позади ls -a показ . и .. не имеет никакого отношения к утилите и всему, чтобы сделать с Unix (и Linux) файловые системы.

Все - файл.

Каталоги являются действительно файлами, которые содержат списки файлов. "В" любом данном каталоге, потому что это - перспектива пользователя, если не точно перспектива файловой системы, существует два специальных файла.

  • Первое, названный ., ссылка на текущий рабочий каталог. Это используется людьми почти каждый день, когда они делают вещи как выполнение команды в текущем каталоге через ./scriptname.
  • Второе, названный .. ссылка на родительский каталог CWDs. Как ., .. используется каждый день всеми, кто требует изменить каталоги на родительский каталог через cd ...

Системный вызов getdents(), который является рабочей лошадью на системной стороне ls, просто перечисляет все файлы в каталоге. (помните: все - файл. устройства, каталоги, сокеты, и т.д. таким образом, они все обнаруживаются),

Со служебной стороны вещей, автора (авторов) ls команда предоставила много возможностей и комбинаций опций, которые позволяют нам отфильтровывать определенные части, или типы информации, например, @Gilles прокомментировал выше этого ls -A покажет весь dotfile, за исключениями . и ... Все эти опции могли быть рассмотрены, выполнив последующую обработку возможности. Они влияют на то, что отображено ls, не, чем найден ls.

Нет действительно никакой причины явно перечислить . и .., по умолчанию, так как все мы знаем, что они там, что они для, и когда использовать их.

Может определенно быть полезно смочь иметь некоторую опцию видеть их, хотя при поиске и устранении неисправностей странных проблем полномочий.

Проверьте страницу справочника для getdents()¹. Это объясняет немного больше о том, как это работает и включает исходный код для примера программы, с которым можно скомпилировать gcc -Wall, который перечисляет все файлы в каталоге.


1. По крайней мере, страница справочника Ubuntu для getdents() кажется, имеет пример кода.

16
27.01.2020, 20:13

ls обычно не отображается . и ... По умолчанию, ls скрывает все файлы, имя которых начинается с a . (отметьте точкой файлы). ls -a отображает их, потому что Вы попросили показывать все. Некоторые версии ls имейте немного отличающуюся опцию, ls -A, показать все точечные файлы, но нет . или ...

Показ . может быть полезным, если Вы перечисляете больше, чем имена; например, ls -la сообщают полномочия и владение текущего каталога и его родителя вдоль тех из файлов в каталоге.

9
27.01.2020, 20:13

Теги

Похожие вопросы