fclose() 를 하지 않으면 파일 시스템이 깨지나요?

msoyu의 이미지

안녕하세요?

얘기를 나누는 중에 fclose()를 하지 않으면 파일 시스템이 깨질 수 있다는 얘기를 들었습니다.
매번 기록하고 fflush()를 하는 경우에는, fclose()를 하지 않더라도 문제가 없지 않을까 하는 생각입니다만...

의견 주시면 감사하겠습니다.
좋은 하루 되세요.

lovejin0309의 이미지

프로세스가 닫히면 파일도 닫힐겁니다.

msoyu의 이미지

답변 감사 드립니다.

좋은 하루 되세요.

좋은 하루 되세요.

ssehoony의 이미지

프로세스가 닫히면, Kernel 이 해당 프로세스의 모든 자원을 반환 받도록 되어 있습니다.
간혹 Kernel의 버그로 자원을 회수 받이 못하는 경우도 있다고 하는데, 그건 어디까지나 버그이니깐 무시하시고
프로세스가 종료되면 모든 자원이 반환된다고 생각하시면 됩니다.
대표적으로 메모리와 file descriptor 입니다.

다만, 프로세스가 종료가 되도 반환 되지 않도록 설계된 몇몇 메커니즘이 있는데요.
제가 알고 있는 것은 공유메모리와 세마포어입니다.
공유메모리의 경우, 메모리를 생성한 프로세스가 종료되거나 에러로 죽어도 공유메모리를 살아있습니다.
세마포어의 경우, 생성한 프로세스가 죽어도 세마포어는 남아 있고, 또한 count를 증가시킨 프로세스가 그냥 종료하거나 사고로 종료해도 기본적으론 count한 카운트를 감소시키지 않습니다. (옵션을 추가하여 감소시키도록 할 수는 있습니다.)
위에 말고 더 알고 계신분이 있으시다면, 알려주시면 감사하겠습니다.

file descriptor 의 경우도 약간의 특별한 규칙이 있습니다.
프로세스가 fork로 인해 fd 가 복사 됐거나, dup() 로 fd를 복사 했을 경우에는 복사된 모든 fd가 close 되야 fd가 제거됩니다.
예를 들어, 소켓 접속을 한후에 fork 로 프로세스를 복사하게 되면, fork 전의 소켓이 새로생선된 프로세스로 복사가 됩니다.
두개의 프로세스중 한곳에서 그 소켓을 close 를 해도, 다른 프로세스에서는 여전히 그 소켓을 사용할 수 있습니다.
소켓 연결이 여전히 계속 되어 있다는 것이지요.
나머지 다른 프로세스에서도 소켓을 close 을 해야, 그때서야 실제로 해당 소켓을 접속 종료가 됩니다.

msoyu의 이미지

감사합니다.
좋은 하루 되세요.

좋은 하루 되세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.