Tcl ne fournit aucun mécanisme intégré pour fournir cela. (Ce serait quelque chose que vous pourriez trouver avec fconfigure
si nous l'avons fait ... mais ce n'est pas le cas.)
La solution de contournement la plus simple consiste à conserver un tableau global mappant des gestionnaires de fichiers aux noms de fichiers. Vous pouvez le conserver vous-même, ou vous pouvez remplacer open
et close
pour conserver le mappage.
rename open _open
rename close _close
array set fhmap {}
proc open {filename args} {
global fhmap
set fd [_open $filename {*}$args]
# Note! Do not normalise pipelines!
if {![string match |* $filename]} {
set filename [file normalize $filename]
}
set fhmap($fd) $filename
return $fd
}
# Probably ought to track [chan close] too.
proc close {filehandle args} {
global fhmap
# Note that we use -nocomplain because of sockets.
unset -nocomplain fhmap($filehandle)
tailcall _close $filehandle {*}$args
}
proc getFHFName {filehandle} {
global fhmap
return $fhmap($filehandle)
}