An additional potential problem is that the select and the I/O operations are still sufficiently decoupled that select's result may effectively be a lie: if two processes are reading from a single file descriptor (arguably bad design) the select may indicate the availability of read data that has disappeared by the time that the read is issued, thus resulting in blocking; if two processes are writing to a single file descriptor (not that uncommon) the select may indicate immediate writability yet the write may still block, because a buffer has been filled by the other process in the interim, or due to the write being too large for the available buffer or in other ways unsuitable to the recipient.
Дополнительная потенциальная проблема заключается в том, что select и операции ввода/вывода по-прежнему достаточно развязаны, при этом результат select может быть эффективно не истинным: если два процесса читают из одного дескриптора файла (возможно, плохой дизайн) select может указывать на наличие данных для чтения, которые исчезнут к тому времени, когда будет производится чтение, что приводит к блокированию; если два процесса производят запись на одном дескрипторе файла (не такая уж редкость) select может указывать на немедленную готовность к записи, однако запись может всё-же блокировать, потому что буфер был заполнен другим процессом в промежутке времени, или из-за слишком большого размера записи для доступного буфера, или другими способами, неподходящим к получателю.