프로그래밍을 하다가 잠시 딜레이를 줘야하는 상황이 있는데요..
글쓴이: weezzle / 작성시간: 금, 2009/05/29 - 6:23오후
프로그래밍을 하다가 잠시 딜레이를 줘야하는 상황이 있는데요..
두 프로그램이 있는데..
A라는 프로그램은 txt파일을 이용해 작업을 하고 있고,
B라는 프로그램은 txt파일이 갱신되었는지 감시하고 있다가 갱신되면
그 파일에 접근하는 형태의 프로그램입니다.
근데 txt파일이 갱신되면 아주 미세한 시간 차이 때문인지..
B라는 프로그램이 갱신되기 이전의 파일 내용을 가져 오더라구요,..
그래서 잠시 딜레이를 주고자
sleep(1);
이걸 넣어주니... 정상적으로 출력되는데...
아시다시피 저기 1은 1초라서 약간의 끊김을 줘서...좀 어색(?)하네요...ㅋㅋ
제 생각에는 0.1정도만 줘도 될꺼라고 생각되는데...
그 정도의 시간 딜레이는 어떻게 만들어야 할까요??
Forums:
sleep보다 시간을 더
sleep보다 시간을 더 촘촘하게 줄 수 있는 usleep이 있습니다.
파일 변경 사항을 감시하려면 inotify도 있습니다. http://kldp.org/node/88828
---- 절취선 ----
http://blog.peremen.name
앜ㅋㅋ
감사합니닷...ㅎ
캐쉬 조심
리눅스나 유닉스에서 미리 메모리에 읽어놓은 txt 파일을 가져오는 cache 일 가능성이 있기 때문에
sleep() 이 동작한다면 그냥 '시스템함수' 하나 부르는 것으로 cache 를 막을 수도 있습니다. sleep(0) 도 통할 겁니다. (socket 통신에서 자주 사용함)
물론 가장 확실한 방법은 inotify 지만... 리눅스의 inotify 는 디렉토리 제한 25개 가 있으므로 주의하세요
-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr
주장하시는 바는
주장하시는 바는 전혀 납득이 되지도 않고, 이때까지 봐왔던 수많은 코드에도 그런 류의 꼼수는 못 봤습니다.
개별 파일시스템의 버그인지 기능인지 알 수 없는 뭔가때문에 fsync(), msync() 가 반드시 필요한 경우가 있긴합니다만,
예기치않은 power fail 상황에 대한 대비책으로 sync()는 부족하다는 것 정도를 의미할 뿐입니다.
file cache(page cache)는 파일에 대해 유일하며, 읽건 쓰건 한 곳에 합니다.
그렇지 않다면 page cache 가 존재할 이유가 없습니다.
유저모드에서 커널모드로 복사된 이후엔, 누가 어디서 어떻게 읽어도 같은 값이 읽힙니다. 그게 실제로 디스크에 씌어졌는지와는 별개로.
jos77 님이 주장하시는 것은 강제로 scheduling 이 일어나도록 하는 꼼수에 가깝다고 생각하는데,
sched_yield() 가 이미 준비되어 있습니다.
pthread 에선... GNU 에서는 pthread_yield() 를 제공하지만 posix 가 아니고,
제대로 설계를 했다면 이런게 필요없으니 제껴도 되겠네요.
그리고, 리눅스 inotify 의 디렉토리 제한 25개가 무슨 말인지요 ?
OTL
댓글 달기