Beispiel
(Abbildung 3.2):
set myresult \ [exec cmd args 2>@ stderr] |
Abbildung 3.2: Quellentextbeispiel: Kindprozeß und exec (synchron)
Liefert insbesondere ein schnelles kurzes Ergebnis
(Sperren (engl.: ,,blocking``), Speicher (engl.: ,,memory``)).
Pro:
Contra:
fork()
(engl.: ,,fork overhead``))
Beispiel
(Abbildung 3.3):
set mypid \ [exec cmd args 2>@ stderr &] |
Abbildung 3.3: Quellentextbeispiel: Kindprozeß und exec (asynchron)
Dies kann insbesondere bei einmaligen Aktionen eingesetzt werden, bei denen der weitere Status nicht weiter relevant ist, beispielsweise in Bezug auf MIME verknüpfte Anwendungen.
Pro:
Contra:
exit
Status, kein Rückgabewert
Beispiel
(Abbildung 3.4):
proc was {arg} { global jobFinished puts "Still at $arg" if {![eof $arg]} { gets $arg data if [eof $arg] { set jobFinished 1 catch {close $arg} puts "EOF reached" return }}} set f [open "|calc " r] fconfigure $f -buffering none -blocking no fileevent $f readable "was $f" vwait jobFinished exit |
Abbildung 3.4: Quellentextbeispiel: Kindprozeß und fileevent (channel)
Fileevents sind sehr universell einsetzbar, z.B. bei verteilten Architekturen.
Pro:
"r+"
open
stdout close
exit
Rückgabewerte (z.B. via catch {close}
)
ptys
)
vwait
mit after
Handlern und GUI
Contra:
Beispiel
(Abbildung 3.5):
load my.so myCall myargs ... |
Abbildung 3.5: Quellentextbeispiel: Ladbare Erweiterungen
Die betrifft vor allem Erweiterungen, die z.B. über IPC und vergleichbare Mechanismen hinausgehen.
Pro:
Contra:
Beispiel
(Abbildung 3.6):
<main.c>: ... Tcl_CreateCommand(...) ... cc ... -lmylib -ltcl |
Abbildung 3.6: Quellentextbeispiel: Angepaßtes main()
Statische Ergänzungen sind nur selten sinnvoll, werden aber gelegentlich aufgrund von Performanz, Entwurf und Vermarktung gewählt.
Pro:
Contra: