Вы ошибаетесь.
Единственным свойством , которое находится в файловом дескрипторе -и которое можно изменить с помощью fcntl(F_SETFD)
, является FD_CLOEXEC
закрытие -флага -exec.
Все остальные свойства относятся либо к файловому объекту («описанию открытого файла» в жаргоне POSIX --, которое можно изменить с помощью fcntl(F_SETFL)
), либо к индексному узлу.
Установка флага отсутствия блокировки -с помощью fcntl(F_SETFL, | O_NONBLOCK)
или с помощью ioctl(FIONBIO)
повлияет на все файловые дескрипторы, которые ссылаются на этот открытый файл. Также нет способа сделать файл неблокирующим -только для чтения или записи.
Это далеко от идеала --вы также можете обратиться к этому вопросам и ответам на StackOverflow, особенно к ссылке на lkml обсуждение о неудачной попытке как-то исправить.
Обратите внимание, что обычные файлы в основном не -блокируют, --a poll(2)
или select(2)
на них возвращаются немедленно.
Если вас интересуют только сокеты, вы должны использовать send(2)
или recv(2)
с флагом MSG_DONTWAIT
вместо read(2)
или write(2)
. Вопреки тому, что вы говорите, дескриптор файла сокета может использоваться совместно между процессами и независимо от его семейства/протокола/параметров. И это также относится к прослушивающему сокету.
-121 ---234860 -
Использование приведенной ниже команды проверено и работает нормально
команда
правин@правин :~$awk 'NR==FNR{a[$1];next}($1 in a){print $0}' file1 file2
выход
правин@правин :~$awk 'NR==FNR{a[$1];next}($1 in a){print $0}' file1 file2
99373 dhdhdhdhd, 3838 dheueie,aaaa
133838000 rrtyusbjsjs,382 djdjdjsusu