윈도우에서 파일사이즈 변화를 인식못하는 경우

luckyhkw의 이미지

C언어 개발자입니다.

A라는 프로그램과 B라는 프로그램이 하나의 파일을 바라보는 상태이구요.

A에서 주기적으로 발생하는 로그를 a.log에 계속 append 하는 상황에서, B라는 프로그램은 a.log의 파일 사이즈를 체크합니다.

B에서는 stat 함수를 사용하여 a.log의 사이즈 값을 계속 체크하구요.

그런데 A라는 프로그램에서 a.log 파일에에 로그를 저장할때 tail을 걸어서 봤을때는 로그를 계속 저장하고 있는데 윈도우 탐색기에서는 사이즈 변화가 없는 상태이구요. A 프로그램을 종료하면 사이즈가 변합니다.

다른 윈도우 OS에서는 그러지 않는데, 윈도우 8과 윈도우서버 2012에서 이런 증상이 발생합니다. 혹시 원인을 알고 계신분이 계신가요??

B라는 프로그램에서 사이즈 변화를 감지 하지 못해서 계속 에러가 발생합니다. ㅠ 도와주세요

익명 사용자의 이미지

로그를 작성할때마다 파일 open/close를 해주고 계시나요?

알고 계실지도 모르지만, 파일 포인터를 향해 쓰기 작업을 한다해서 물리적으로 파일에 바로 적용되는 것은 아니닙니다.

twinwings의 이미지

주기억장치의 I/O 속도가 보조기억장치 I/O 속도보다 수백배 빠르기 때문에

운영체제의 버퍼에 쌓았다가 한번에 기록합니다.

이를 강제로 쓰게하는 행동을 보통 flush 또는 sync 라고 보통 부릅니다.


  • 유닉스 계열의 API로는 fsync()

  • Win API ???

  • C 표준 라이브러리에는 fflush()

  • C++ 표준 라이브러리에는 std::ostream::flush

3), 4)는 플랫폼 종속적인 구현이고

1), 2)는 언어자체에서 제공해주기 때문에 해당 플랫폼의 표준 라이브러리만 누군가

작성해놓은 상태라면 플랫폼 독립적인 구현이 됩니다.

----
사족 붙이자면 질문자가 구현하려는 방법은 주기적으로 감시하는,

보통 동기적인 방식이라고 칭합니다.

또 다른 구현이 있는데 그것보다 시간에 따른 갱신이 아닌, 이벤트 기반의 방식을

비동기방식이라고 칭합니다. 파일변화가 일어났을 때 어떤 행동을 취할지

운영체제에 등록해서 구현하는 방법도 존재합니다.

예를 들어,

1) 프로세스가 운영체제에 [이벤트]/[이벤트 처리 함수]를 등록
2) 운영체제가 파일의 크기 변화 감지
3) 운영체제가 해당 프로세스가 요청한 [특정 조건]이 발생하면 [이벤트 처리 함수] 호출

가 되겠죠.

---
PS. flush()는 출력에 대해서만 표준이 있고 입력에 대해서는 표준이 없던가

동작하지 않던가 할 겁니다. 기본적으로 출력용으로만 쓰세요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.