You are here

file open시 채널의 사용가능 범위는?

년초에 tcl을 알게 되서 현재 업무에 활용코저 하는데... 난관이 많습니다...
도와 주십시요.

-------------------

로그 파일등 빈번하게 쓰기가 일어나는 엑션의 경우 대상이 되는 로그 파일을 처음에 한번 오픈한 뒤 파일의 채널을 전역변수등에 넣어 놓고 로깅이 일어날때 마다 파일을 오픈하지 않고 기록한다음. 프로그램이 종료 될때 로그 파일을 close하고 싶습니다.

그런데 다음 코드에서 보듯이 한번 파일의 채널을 얻고나서 그 채널을 사용하는데는 변수의 범위가 있듯이 채널도 범위가 있는것 같습니다.
일단 코드를 보시지요.

        if { $LogFileCh == "" } {               #-- 1(
                  if { [file exists $LogFile] } {
                        if [catch {open $LogFile {WRONLY APPEND}} #--2( LogFileCh] {
                                puts stderr "Cannot open $LogFile : $LogFileCh"
                        } else {
                                puts $LogFileCh "[$LogFileCh][clock format [clock second] -format %Y.%m.%d.%H:%
M:%S] $logstr"

                                close $LogFileCh
                        }
                } else {
                        if [catch {open $LogFile {WRONLY CREAT}} LogFileCh] {
                                puts stderr "Cannot open $LogFile : $LogFileCh"
                        } else {
                                puts $LogFileCh "[$LogFileCh][clock format [clock second] -format %Y.%m.%d.%H:%
M:%S] $logstr"

                                close $LogFileCh
                        }
                }
        }

의 코드에서 보듯이 1)블럭에서 전역변수인 LogFileCh을 검사하여 널이면 파일을 오픈한다음 전역변수에 파일채널을 입력 후 계속 사용하려고 했습니다만.

2)블럭에서 반환된 채널은 2)블럭을 빠져나가면 더이상 유효하지 않다고 나옵니다. (이를테면 2) 블럭에서 얻은 채널을 다른 프로시져나 블럭에서 사용하면 인식하지 않습니다.)

현재는 로깅 시점마다 파일을 오픈-> 기록 -> close 하고 있습니다.

정리하면

1. open 시에 반환되는 채널을 proc 간 공유 방법은 무엇인가?
2. open 시에 반환되는 채널의 정확한 유효 범위는 무엇인가?

좀더 세련된 방법이 없을까요?

-----------------

그럼 고수님들의 한수 가르침을 기다리겠습니다.