Tak więc program „Hello world” w Tcl-u wygląda tak:

puts "Hello, world!"

Komenda puts jest właściwie jedyną komendą obsługującą operacje wyjściowe i to niezależnie od tego, czy wysyła się dane tekstowe, czy binarne. Do operacji wejściowych istnieje więcej komend:

gets <kanał> ?zmienna?

Komenda ta czyta jedną linię danych. Jeśli zostanie podana ?zmienna?, w niej będzie umieszczony wczytany napis, a zwrócona zostanie jego długość. Jeśli zmienna nie zostanie podana, wczytana linijka będzie zwrócona jako wynik. Do czytania przeznaczona jest też druga komenda, występująca w dwóch postaciach:

read ?-nonewline? <kanał>

Czyta wszystko z zadanego <kanału> aż do tzw. EOF. Jeśli podano -nonewline, to w zwróconym przez komendę tekście nie będzie znaku końca linii, jeśli byłby on ostatnim znakiem.

read <kanał> <ile>

Czyta z zadanego <kanału> <ile> bajtów danych. Jeśli EOF nastąpił, zanim odczytano <ile> znaków, to zostanie zwrócone tylko tyle, ile wczytano. Jeśli <kanał> blokuje odczyt, to komenda zakończy się, dopiero gdy odczytana zostanie wymagana liczba bajtów.

Kanały mogą być też otwarte do różnych innych urządzeń. Standardowa komenda open otwiera dostęp do pliku:

set fd [open filename.txt r]