2012-10-29 3 views
1

해당 파일이 닫혔는지 어떻게 확인할 수 있습니까? 예를 들어해당 파일을 확인하는 방법

:

file channels $fh 

반환 아무것도 그래서 어떤 상황에서 사용할 수 없습니다 :

set fh [open "some_test_file" "w"] 
puts $fh "Something" 
close $fh 

지금 내가 그 채널 $의 FH를 확인하려면이 명령을 닫힙니다.

+0

실제로 ** catch ** 명령이 여기에서 도움이 될 수 있지만 더 흥미로운 해결책이있을 수 있음을 발견했습니다. –

답변

2

또한 같은 것을 사용할 수 있습니다 변수에 채널 이름을 넣지 왜 그냥 변수를하지 않습니다 확인 [close] suceeded와 검사 코드의 경우, 변수가 설정되지 않은 닫는 코드를 확인

proc is_open {chan} {expr {[catch {tell $chan}] == 0}} 
2

닫기 명령이 오류를 반환하지 않으면 성공한 것입니다. file channels 명령은 인수를 사용하지 않고 열려있는 모든 채널을 반환하기 때문에 $channel in [file channels]은 채널을 닫았는지 확인하기위한 중복 테스트입니다. 그러나 가까운 명령의 오류가 아닌 응답을 믿는 것은 어떻습니까?

필자는 약간의 점검과 파일 채널 명령이 반환 할 채널 이름의 선택적 패턴 (glob 표현식)을 취할 수 있음을 밝혀 줘야합니다. 따라서 파일이 아직 열려있는 경우 원본 예제가 작동합니다. 이것을 file channels std*을 사용하여 tclsh 해석기에서 테스트 할 수 있습니다. 그러나 close 명령은 여전히 ​​채널을 닫지 못하면 catch 될 수있는 오류를 반환하므로 잠재적으로 이러한 오류를 처리 할 수 ​​있습니다 (일부 경우 나중에 다시 시도 할 수도 있음).

+0

다른 절차로 파일을 닫고 현재 절차에서 파일이 닫힌 상태 만 확인하고 싶습니다. –

0

을 존재하지 않는다 (즉, 설정되지 않은)?

시스템 프로그래밍에서 좀 더 일반적인 방법을 따르고 있습니다. 일단 OS 파일 핸들을 닫으면 무효가되고 모든 액세스가 무효화됩니다. 따라서 핸들과 신호를주고 받기위한 다른 수단은 파일과 더 이상 연관되어 있지 않습니다.

+0

예, 좋은 생각입니다. 감사합니다. –

관련 문제