Потоковое содержимое каталога вместо чтения всех элементов

трассировка bash -c 'cat <(echo pass)'показывает, что это делает <()путем вызова pipe2, дублирования его на больший fd (63 в моем случае )и передачи его как /dev/fd/SOMEFDвместо <().

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

Вы можете проверить это, например, эмулируя последовательность на языке сценариев а затем использовать независимые процессы для чтения конца канала до того, как это сделает предполагаемый получатель.

1
02.09.2018, 23:12
1 ответ

На системном уровне вызов 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 имеет параллельную рекурсивную реализацию файловой системы, и что за прошедшие годы в реализации были внесены различные исправления.

2
27.01.2020, 23:23

Теги

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