Spec-Zone.ru › Tcl/Tk

fblocked

Имя

fblocked — Проверка, исчерпал ли последний ввод все доступные данные

Синтаксис

fblocked channelId

Описание

Команда fblocked возвращает 1, если последнее операция ввода на канале channelId вернула меньше данных, чем запрошено, поскольку все доступные данные были исчерпаны. Например, если команда gets вызвана, когда доступно только три символа ввода и нет последовательности конца строки, gets возвращает пустую строку, а последующий вызов fblocked вернёт 1.

ChannelId должен быть идентификатором открытого канала, такого как стандартный канал Tcl (stdin, stdout или stderr), значение, возвращаемое вызовом open или socket, или результат команды создания канала, предоставляемой расширением Tcl.

Пример

Команда fblocked особенно полезна при написании сетевых серверов, так как позволяет писать код построчно, не препятствуя обслуживанию других подключений. Это можно увидеть в этом простом эхо-сервисе:
# This is called whenever a new client connects to the server
proc connect {chan host port} {
    set clientName [format <%s:%d> $host $port]
    puts "connection from $clientName"
    fconfigure $chan -blocking 0 -buffering line
    fileevent $chan readable [list echoLine $chan $clientName]
}

# This is called whenever either at least one byte of input
# data is available, or the channel was closed by the client.
proc echoLine {chan clientName} {
    gets $chan line
    if {[eof $chan]} {
        puts "finishing connection from $clientName"
        close $chan
    } elseif {![fblocked $chan]} {
        # Didn't block waiting for end-of-line
        puts "$clientName - $line"
        puts $chan $line
    }
}

# Create the server socket and enter the event-loop to wait
# for incoming connections...
socket -server connect 12345
vwait forever

См. также

gets, open, read, socket, Tcl_StandardChannels

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/fblocked.htm

Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/fblocked.htm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API