Вы можете проверить входной Tcl буфер с помощью chan pending input stdin
(требуется по крайней мере Tcl 8.5). Это не указывает, имеет ли ОС что-либо в своих буферах; они проверяются при попытке прочитать данные (gets
или read
) или с помощью сценария, который запускает чтение fileevent
, когда присутствует хотя бы один байт. (Что ж, строго то, что фактически обещано, так это то, что попытка чтения одного байта не будет блокирована, но это может быть из-за ошибки, которая вызывает немедленный сбой. Это семантика того, как работает готовность дескриптора файла на уровне ОС.)
Опция -buffering
влияет только на выходные каналы; он бесполезен на stdin
(или любом другом канале, доступном только для чтения) и не имеет никакого эффекта. В самом деле. (Это, однако, слишком много проблем, чтобы удалить.)