Почему делают списки каталогов содержат ток (.) и родителя (..) каталог?

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

Вам нужна функция для преобразования HSV в RGB, например:

function HSVtoRGB(h, s, v)
{
    var r, g, b, i, f, p, q, t;
    i = Math.floor(h * 6);
    f = h * 6 - i;
    p = v * (1 - s);
    q = v * (1 - f * s);
    t = v * (1 - (1 - f) * s);
    switch (i % 6)
    {
        case 0: r = v, g = t, b = p; break;
        case 1: r = q, g = v, b = p; break;
        case 2: r = p, g = v, b = t; break;
        case 3: r = p, g = q, b = v; break;
        case 4: r = t, g = p, b = v; break;
        case 5: r = v, g = p, b = q; break;
    }
    r = Math.round(r * 255).toString(16);
    g = Math.round(g * 255).toString(16);
    b = Math.round(b * 255).toString(16);
    if (r.length < 2) r = '0' + r;
    if (g.length < 2) g = '0' + g;
    if (b.length < 2) b = '0' + b;

    return '#' + r + g + b;
}

Параметры варьируются от 0 до 1. Использование HSVtoRGB(Math.random(), 1, 1) всегда даст вам яркий цвет с максимальным значением и насыщенностью .

9
задан Lemming 27 November 2008 в 02:24
поделиться

8 ответов

. и .. на самом деле жесткие ссылки в файловых системах. Они необходимы так, чтобы можно было указать относительные пути, на основе некоторого ссылочного пути (рассмотреть "../sibling/file.txt"). Так как эти жесткие ссылки являются на самом деле существующими в файловой системе, она имеет смысл для readdir сказать Вам о них. (на самом деле термин hard link просто средства некоторое имя, которое неотличимо от фактического упомянутого каталога: они оба точка к тому же inode в файловой системе).

Лучший способ только к strcmp и проигнорируйте их, если Вы не хотите перечислять их.

11
ответ дан 4 December 2019 в 10:34
поделиться

Одна причина состоит в том, что без них нет никакого способа добраться до родительского каталога. Или получите дескриптор к текущему каталогу.

Без них мы не можем сделать таких вещей как:

./run_this

Действительно, мы не могли добавить '.' к $PATH, подразумевая, что мы никогда не могли выполнять файлы, которые уже не были в пути.

3
ответ дан 4 December 2019 в 10:34
поделиться

Первоначально они были жесткими ссылками и количеством особых случаев в коде файловой системы для. и.. были минимальны. Это не верно для всех современных файловых систем, как бы то ни было.

Но конвенции были установлены так, чтобы даже файловые системы, где эти две записи каталога на самом деле не существуют все еще, сообщили о своем существовании через API как readdir. Изменение этого было бы теперь взламывать много кода.

6
ответ дан 4 December 2019 в 10:34
поделиться

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

0
ответ дан 4 December 2019 в 10:34
поделиться

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

Что-то как grep { not /^.{1,2}\z/ } readdir HANDLE должен работать на Вас.

0
ответ дан 4 December 2019 в 10:34
поделиться

нет никакого серьезного основания, сканирование каталога должно возвратить эти имена файлов.

-4
ответ дан 4 December 2019 в 10:34
поделиться

Это нормальные каталоги, они - "жесткие ссылки" на текущий каталог и каталог выше. Они присутствуют во всех каталогах (даже на корневом уровне, где .. точно то же как .).

При использовании ls, можно отфильтровать . и .. с ls -A (отметьте капитал -A).

При применении команды ко всем точечным файлам, но нет . или .., Я часто использую .??* который соответствует только точечному файлу названию трех символов или больше.

touch .??*

Обратите внимание, что этот шаблон также исключает любой другой файл, который начинается с точки и является только двумя символами долго (например. .x) но те файлы являются редкими.

При использовании программного файла-listers как readdir() Я действительно должен исключить . и .. вручную. Так как эти два файла, как предполагается, являются первыми в списке, возвращенном readdir() можно сделать это:

@files = readdir(DIR);
for (1..2) { shift @files; } # get rid of . and ..
# go on with your business
1
ответ дан 4 December 2019 в 10:34
поделиться

У меня есть подозрение, что это просто нормальные ссылки в файловой системе и поэтому неразличимый из фактических файлов

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

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

1) это - первое приближение, существуют также "жесткие ссылки", возможные, которые делают дерево на самом деле сетью.

3
ответ дан 4 December 2019 в 10:34
поделиться
Другие вопросы по тегам:

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