2017-08-24 4 views

Répondre

3

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) 
}