трассировка bash -c 'cat <(echo pass)'
показывает, что это делает <()
путем вызова pipe2
, дублирования его на больший fd (63 в моем случае )и передачи его как /dev/fd/SOMEFD
вместо <()
.
Если ccrypt
не удается быстро прочитать пароль, теоретически он может быть перехвачен третьим процессом, работающим под тем же пользователем.
Вы можете проверить это, например, эмулируя последовательность на языке сценариев а затем использовать независимые процессы для чтения конца канала до того, как это сделает предполагаемый получатель.
На системном уровне вызов readdir(3)
используется для возврата потока записей каталога, пока не возникнет ошибка или этот список не закончится:
The readdir() function returns a pointer to the next directory entry in
the named directory stream dirp. It returns NULL upon reaching the end
of the directory or detecting an invalid seekdir() operation.
Сопоставление fs.readdir
с приведенным выше будет зависеть от того, как эта функция реализована в JavaScript; может быть способ вызвать fs.readdir
для получения отдельных записей каталога по очереди, а не считывать их все в память сразу.
readdir(3)
не является рекурсивным; он не будет проверять содержимое дочерних каталогов; для этого обычно используется вызов fts(3)
.Языки более высокого уровня могут использовать fts(3)
или вместо этого они могут вручную повторять последовательные вызовы opendir
, readdir
и closedir
для каждого нового дочернего каталога, найденного во время цикла readdir(3)
.
Конкретные реализации языка высокого уровня могут быть неэффективными для большого количества файлов; Я полагаю, что язык Go имеет параллельную рекурсивную реализацию файловой системы, и что за прошедшие годы в реализации были внесены различные исправления.