프로그램을 짜다 보니 여러개의 프로세스가
한 파일을 건드리게 즉, fopen 해서 읽고 쓰고 하게 되었습니다.
문제는 한 프로세스가 쓸때 다른 놈이 못 읽게..
해야 되는데.. 어떻게 해야 할지.
라이브러리 등으로 제공되는 세마포어 라든가..
뭐 그런 거 없나요? ^^;
flock()이나 lockf() 함수를 이용하시면 됩니다.
-- 익스펙토 페트로눔
조심 하세요
lockf나 flock을 써서 할 수도 있지만... 그리 범용적인 방법은 아닙니다.
fcntl을 써서 구현하는 편이 더 좋을 거 같네요. 아래는 fcntl 함수의 프로토타입인데...
int fcntl(int filedes, int cmd, ... );
record locking을 구현하기 위해서... cmd에 F_GETLK, F_SETLK, F_SETLKW 를 사용할 수 있습니다.
자세한 내용은 Stevens가 지은 'Advanced Programming in the Unix Environment' 책의 '12.3 Record Locking을' 참조하세요.
어찌나 졸린지..~~
죄송한데요...fcntl 하구 close(fd) 는 원자성 오퍼레이션(atomic operation) 을 가진다고 하는데요..
제가 아둔하여 그 의미가 이해가 되질 않습니다.. :cry:
반드시 한번에 처리되어야 하는 작업이라는 건데..
설명이 잘 이해가 되지 않습니다.
좀 가르쳐 주세요...ㅠ.ㅠ.. lock 을 한다는 건지..어떤건지...ㅠ.ㅠ...
원자적이라는 의미는
처리 중에 다른 프로세스나 쓰레드가 끼어 들 수 없다는 소리입니다.
즉 fcntl 이 실행되는 도중에 어떤 프로세스가 그 실행도중에
끼어 들 수 없다는 얘기입니다.~
하나의 처리 단위로 보장해 준다는 소리죠....
여러분들의 조언 감사합니다.
그런데, flock 이나 fcntl 등을 이용해서 락을 걸면 다른 프로세스는 락이 풀리기를 기다리나요? 아님.. 에러 메세지를 표시 하고 리턴 되나요?
무엇이 더 필요하단 말인가...
F_SETLK, F_SETLKW
man page를 잘 읽어 보시면...
두 개가 다른 것임을 알 수 있을 것입니다. 뒤에것이 lock이 존재할 경우 wait 하는 버전이죠.
---http://coolengineer.com
텍스트 포맷에 대한 자세한 정보
<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]
flock()이나 lockf() 함수를 이용하시면 됩니다.
flock()이나 lockf() 함수를 이용하시면 됩니다.
--
익스펙토 페트로눔
지극히 위험한 코드가 되겠군요.
조심 하세요
lockf나 flock을 써서 할 수도 있지만... 그리 범용적인 방법은
lockf나 flock을 써서 할 수도 있지만... 그리 범용적인 방법은 아닙니다.
fcntl을 써서 구현하는 편이 더 좋을 거 같네요.
아래는 fcntl 함수의 프로토타입인데...
record locking을 구현하기 위해서...
cmd에 F_GETLK, F_SETLK, F_SETLKW 를 사용할 수 있습니다.
자세한 내용은 Stevens가 지은 'Advanced Programming in the Unix Environment' 책의 '12.3 Record Locking을' 참조하세요.
어찌나 졸린지..~~
죄송한데요...fcntl 하구 close(fd) 는 원자성 오퍼레이션(a
죄송한데요...fcntl 하구 close(fd) 는 원자성 오퍼레이션(atomic operation)
을 가진다고 하는데요..
제가 아둔하여 그 의미가 이해가 되질 않습니다.. :cry:
반드시 한번에 처리되어야 하는 작업이라는 건데..
설명이 잘 이해가 되지 않습니다.
좀 가르쳐 주세요...ㅠ.ㅠ.. lock 을 한다는 건지..어떤건지...ㅠ.ㅠ...
원자적이라는 의미는 처리 중에 다른 프로세스나 쓰레드가 끼어 들
원자적이라는 의미는
처리 중에 다른 프로세스나 쓰레드가 끼어 들 수 없다는 소리입니다.
즉 fcntl 이 실행되는 도중에 어떤 프로세스가 그 실행도중에
끼어 들 수 없다는 얘기입니다.~
하나의 처리 단위로 보장해 준다는 소리죠....
감사
여러분들의 조언 감사합니다.
그런데, flock 이나 fcntl 등을 이용해서
락을 걸면 다른 프로세스는 락이 풀리기를 기다리나요?
아님.. 에러 메세지를 표시 하고 리턴 되나요?
무엇이 더 필요하단 말인가...
F_SETLK, F_SETLKW man page를 잘 읽어 보시면
F_SETLK, F_SETLKW
man page를 잘 읽어 보시면...
두 개가 다른 것임을 알 수 있을 것입니다. 뒤에것이 lock이 존재할 경우 wait 하는 버전이죠.
---
http://coolengineer.com
댓글 달기