Monday, January 29, 2007
C, Perl에서, 연 파일을 닫아야 하는 이유는? fclose() close()로
파일을 한 번 오픈(open)했으면, 그 파일에 읽기 또는 쓰기 작업을 끝낸 후, fclose() 등의 함수로 (펄은 close()), 그 파일을 닫아 주어야 합니다. 다른 언어에서도 마찬가지입니다.
Q: 파일을 닫지 않으면 어떻게 됩니까?
A: 파일을 닫지 않으면, 프로그램을 종료해도 그 파일의 삭제나 이름 변경이나 이동이 잘 안되는 경우가 생깁니다.
그리고 메모리 속에 그 파일에 대한 정보가 계속 남아 있어서 메모리를 불필요하게 차지할 수도 있습니다. 물론 이런 문제는 컴파일러나 운영체제에 따라 좀 다릅니다. (MS-DOS에서는 시스템 전체가 불안정해지는 경우도 있었습니다.)
Perl(펄) 같은 언어는, 작업 블록을 벗어나면 자동으로 파일이 닫힙니다. 그러나 되도록 close() 함수를 사용하여 명시적으로 닫아주는 것이 안전합니다.
다만 C의 경우, exit() 함수를 사용하여 프로그램을 종료했다면, exit() 함수가 모든 열린 파일들을 자동으로 닫아주기("Before termination, all files are closed...")에 직접 닫을 필요는 없습니다.
Q: 파일을 닫지 않으면 어떻게 됩니까?
A: 파일을 닫지 않으면, 프로그램을 종료해도 그 파일의 삭제나 이름 변경이나 이동이 잘 안되는 경우가 생깁니다.
그리고 메모리 속에 그 파일에 대한 정보가 계속 남아 있어서 메모리를 불필요하게 차지할 수도 있습니다. 물론 이런 문제는 컴파일러나 운영체제에 따라 좀 다릅니다. (MS-DOS에서는 시스템 전체가 불안정해지는 경우도 있었습니다.)
Perl(펄) 같은 언어는, 작업 블록을 벗어나면 자동으로 파일이 닫힙니다. 그러나 되도록 close() 함수를 사용하여 명시적으로 닫아주는 것이 안전합니다.
다만 C의 경우, exit() 함수를 사용하여 프로그램을 종료했다면, exit() 함수가 모든 열린 파일들을 자동으로 닫아주기("Before termination, all files are closed...")에 직접 닫을 필요는 없습니다.
tag: cpp
C언어 | C/C++ (Visual C++)
tag: perl
Perl | 펄
아, 그런 점도 있었습니다.
도스는 동시에 열 수 있는 파일 개수에 제한이 있었지요.
(∩_∩)
Dos, C 환경에서 파일을 Open만 하고 Close 하지 않을 경우 최대 파일 Open 숫자를 넘기게 되면 더 이상 Open 되지 않고 에러를 발생시키더군요. :)
(새 블로거 버전에서는, 한글 아이디 글자가 깨져서, 다시 올립니다.)
<< Home