윈도우에서 파일사이즈 변화를 인식못하는 경우
글쓴이: luckyhkw / 작성시간: 수, 2015/08/19 - 3:16오후
C언어 개발자입니다.
A라는 프로그램과 B라는 프로그램이 하나의 파일을 바라보는 상태이구요.
A에서 주기적으로 발생하는 로그를 a.log에 계속 append 하는 상황에서, B라는 프로그램은 a.log의 파일 사이즈를 체크합니다.
B에서는 stat 함수를 사용하여 a.log의 사이즈 값을 계속 체크하구요.
그런데 A라는 프로그램에서 a.log 파일에에 로그를 저장할때 tail을 걸어서 봤을때는 로그를 계속 저장하고 있는데 윈도우 탐색기에서는 사이즈 변화가 없는 상태이구요. A 프로그램을 종료하면 사이즈가 변합니다.
다른 윈도우 OS에서는 그러지 않는데, 윈도우 8과 윈도우서버 2012에서 이런 증상이 발생합니다. 혹시 원인을 알고 계신분이 계신가요??
B라는 프로그램에서 사이즈 변화를 감지 하지 못해서 계속 에러가 발생합니다. ㅠ 도와주세요
Forums:
혹시..
로그를 작성할때마다 파일 open/close를 해주고 계시나요?
알고 계실지도 모르지만, 파일 포인터를 향해 쓰기 작업을 한다해서 물리적으로 파일에 바로 적용되는 것은 아니닙니다.
주기억장치의 I/O 속도가 보조기억장치 I/O
주기억장치의 I/O 속도가 보조기억장치 I/O 속도보다 수백배 빠르기 때문에
운영체제의 버퍼에 쌓았다가 한번에 기록합니다.
이를 강제로 쓰게하는 행동을 보통 flush 또는 sync 라고 보통 부릅니다.
3), 4)는 플랫폼 종속적인 구현이고
1), 2)는 언어자체에서 제공해주기 때문에 해당 플랫폼의 표준 라이브러리만 누군가
작성해놓은 상태라면 플랫폼 독립적인 구현이 됩니다.
----
사족 붙이자면 질문자가 구현하려는 방법은 주기적으로 감시하는,
보통 동기적인 방식이라고 칭합니다.
또 다른 구현이 있는데 그것보다 시간에 따른 갱신이 아닌, 이벤트 기반의 방식을
비동기방식이라고 칭합니다. 파일변화가 일어났을 때 어떤 행동을 취할지
운영체제에 등록해서 구현하는 방법도 존재합니다.
예를 들어,
1) 프로세스가 운영체제에 [이벤트]/[이벤트 처리 함수]를 등록
2) 운영체제가 파일의 크기 변화 감지
3) 운영체제가 해당 프로세스가 요청한 [특정 조건]이 발생하면 [이벤트 처리 함수] 호출
가 되겠죠.
---
PS. flush()는 출력에 대해서만 표준이 있고 입력에 대해서는 표준이 없던가
동작하지 않던가 할 겁니다. 기본적으로 출력용으로만 쓰세요.
댓글 달기