Успешный вызов open
возвращает наименьшее число в качестве файлового дескриптора, который еще не используется.
Таким образом, если open
возвращает 4, это означает, что файловые дескрипторы 0 -3 уже используются. Поскольку fork
дает те же файловые дескрипторы дочернему элементу, у дочернего элемента также будет использоваться fd 0 -3 и свободный fd 4, поэтому два успешных вызова open
в родительском и дочернем элементах сразу после fork
вернет тот же номер. Но если родитель или дочерний элемент открывали или закрывали файлы после fork
, числа могут быть другими.
В общем, вы не должны полагаться на предсказание fd вызова open
, если только у вас нет веских причин и вы не уверены, что можете предсказать его правильно.
Вы можете написать zsh
скрипт, например:
#! /bin/zsh -
# list of files to find on stdin or in file arguments, LF delimited
to_find=(${(f)"$(cat -- "$@")"})
in_current_dir=(*(ND))
# print files in both lists, LF delimited:
print -rC1 -- ${in_current_dir:*to_find}