我知道flush
的作用。它将数据存储在缓冲区中并将其写入标准输出以清空缓冲区。但是我不清楚何时需要这样做(不应该由翻译自动进行刷新)。我正在阅读Ruby Programming Language一书,它给出了套接字服务器的例子:
require 'socket'
host, port = ARGV
begin
STDOUT.print "Connnecting..."
STDOUT.flush
s = TCPSocket.open(host,port)
STDOUT.puts "done"
local, peer = s.addr, s.peeraddr
STDOUT.print "Connected to #{peer[2]}:#{peer[1]}"
STDOUT.print "Using local port #{local[1]}"
begin
sleep(0.5)
msg = s.read_nonblock(4096)
STDOUT.puts msg.chop
rescue SystemCallError
end
loop do
STDOUT.print '> '
STDOUT.flush
local = STDIN.gets
break if !local
s.puts(local)
s.flush
response = s.readpartial(4096)
puts(response.chop)
end
rescue
puts $!
ensure
s.close if s
end
为什么我们在写“连接”到STDOUT后调用flush,但是在向STDOUT写“完成”之后我们不调用flush?这似乎是武断的。这就是我的困惑所在。
答案 0 :(得分:2)
确保"连接......"在可能长时间运行的事情发生之前打印出来。
一旦您将其连接起来,获得即时反馈就不那么重要了,并且在">"打印字符以响应读取数据。