flush — 채널에 버퍼된 출력 비우기
flush — 채널에 버퍼된 출력 비우기
파일이나 소켓에 데이터를 써 넣으면 Tcl은 바로 내보내지 않고 버퍼에 쌓아 두는 경우가 있어요. 그걸 지금 당장 밀어내야 할 때 flush 명령어를 써요.
본문
시그니처
flush channelId
flush는 channelId에 버퍼로 쌓여 있던 출력을 전부 비워요. channelId는 열려 있는 채널의 식별자여야 해요 — Tcl 표준 채널(stdout이나 stderr), open이나 socket 호출의 반환값, 또는 Tcl 확장이 제공하는 채널 생성 명령어의 결과를 쓰면 돼요. 이때 채널은 쓰기용으로 열려 있어야 해요.
채널이 블로킹 모드라면 버퍼된 출력이 전부 채널로 써질 때까지 명령어가 반환되지 않아요. 반면 논블로킹 모드라면 버퍼를 다 비우기 전에 반환될 수 있고, 나머지는 기본 파일이나 장치가 흡수할 수 있는 만큼의 속도로 백그라운드에서 계속 비워져요.
예제
사용자가 콘솔에 뭔가 입력하게 프롬프트를 띄울 때가 대표적인 경우예요. 프롬프트가 화면에 바로 보여야 하니까 잊지 말고 비워 줘요:
puts -nonewline "Please type your name: "
flush stdout
gets stdin name
puts "Hello there, $name!"