만약 소켓통신을 한다고 할때..
어떤 파일이 다 쓰인뒤에 그것을 전송을 할려고 합니다
그러니깐 다른 프로그램에서 쓰고 있는 도중에서는 그 열려진 정보를 알려주며..
접근을 막는거죠..
개념은 세마포어 비슷한데 자기 프로그램이 아닌 다른프로그램에서
그 파일을 열고 있는지 알려면...어떻게 해야 하나요??
Advanced Programming in the UNIX Environment 책에서 record lock 부분을 읽어보면
서로 다른 프로세스가 파일에 record lock하는 방법은 구현되어 있지 않다고 나와있습니다.
System V IPC같이 시스템 전역적인 방법으로 구현되지 않으면 안되는데
이런 방법은 제가 생각해도 여러 가지 문제가 많다고 생각합니다.
다만 사용하는 리눅스 커널이 /proc filesystem을 지원한다면 이 디렉토리를 검색해서
모니터링할 수는 있겠죠.
/proc/$PID/fd/ 디렉토리 안에 열려진 file descript 번호와 링크가 존재하니까요.
어떤 파일이 다 쓰인뒤에 그것을 전송을 할려고 합니다
--------------------- -------------------------------
proc 1 proc 2
프로세서가 다른데 순차적인 프로세싱을 할 경우에는..
proc 1의 프로세싱이 다 끝났다는 것을 proc2에 알려줘야??
알려주는 방법은...... 세마포어나 파일락에 관련된 것으로 할 경우에..
proc 1이 일어나지 않은채 proc2가 실행될 수 있으므로..
proc 1에서 프로세싱이 끝났다는 것을 proc 2에 알려주면 될 것 같네요.
방법은.. 새로운 파일을 생성하여 그 존재유무를 proc2에서 알게 하는것과.
파일 안에 프로세싱이 끝난 정보를 링크 리스트 형태로 저장한다던가
shared memory를 잡아서 링크 리스트 형태로 관리하거나..
직접 proc1에 socket을 넣어서....... 잡아오던가..
아니면....... proc 1과 proc2를 파이프로 연결을 해서 프로세싱이 끝났는지
확인하는 방법이 있는 것 같습니다.
fuser 를 사용하시면...
fuser 를 사용하시면...
---
http://coolengineer.com
file에 lock을 쓰면 됩니다.
fcntl에 보면 file lock에 대한 옵션이 있습니다. 이것을 사용하시면 됩니다.
(flock을 쓰셔도 상관은 없습니다.)
========================================
* The truth will set you free.
가끔 제가 헷소리할때가 있어요... 왜이러쥥...
가끔 제가 헷소리할때가 있어요...
왜이러쥥...
잘 안읽고 답하는 나쁜 버릇..
---
http://coolengineer.com
일반적인 시스템 프로그래밍으로는 안되는 것으로 압니다.
Advanced Programming in the UNIX Environment 책에서 record lock 부분을 읽어보면
서로 다른 프로세스가 파일에 record lock하는 방법은 구현되어 있지 않다고 나와있습니다.
System V IPC같이 시스템 전역적인 방법으로 구현되지 않으면 안되는데
이런 방법은 제가 생각해도 여러 가지 문제가 많다고 생각합니다.
다만 사용하는 리눅스 커널이 /proc filesystem을 지원한다면 이 디렉토리를 검색해서
모니터링할 수는 있겠죠.
/proc/$PID/fd/ 디렉토리 안에 열려진 file descript 번호와 링크가 존재하니까요.
너 행복하니?
윗분이 말씀하신데로record locking을 쓰기 위해서는 같은 파
윗분이 말씀하신데로
record locking을 쓰기 위해서는 같은 파일에 접근하고자 하는 프로세스들 모두가 record locking을 사용해야 합니다.
만약 그렇지 못하다면, record locking은 쓸모가 없게 됩니다.
예를 들어 다음과 같은 방법으로 간단히 테스트 해 볼 수 있습니다.
1번을 실행한 후, 2번을 실행하게 되면 2번은 정상적으로 동작을 합니다.
1번에서는 lock을 걸었으나, 2번에서는 그 lock에대한 체크를 하지 않기 때문에
1번의 lock은 혼자만의 lock으로 여기에서는 쓸모가 없어지게 됩니다...
반대의 경우도 있을 수 있죠...
/***********************
* while(1) sleep(INFINITE);
***********************/
[code:1]어떤 파일이 다 쓰인뒤에 그것을 전송을 할려고 합니다-
프로세서가 다른데 순차적인 프로세싱을 할 경우에는..
proc 1의 프로세싱이 다 끝났다는 것을 proc2에 알려줘야??
알려주는 방법은...... 세마포어나 파일락에 관련된 것으로 할 경우에..
proc 1이 일어나지 않은채 proc2가 실행될 수 있으므로..
proc 1에서 프로세싱이 끝났다는 것을 proc 2에 알려주면 될 것 같네요.
방법은.. 새로운 파일을 생성하여 그 존재유무를 proc2에서 알게 하는것과.
파일 안에 프로세싱이 끝난 정보를 링크 리스트 형태로 저장한다던가
shared memory를 잡아서 링크 리스트 형태로 관리하거나..
직접 proc1에 socket을 넣어서....... 잡아오던가..
아니면....... proc 1과 proc2를 파이프로 연결을 해서 프로세싱이 끝났는지
확인하는 방법이 있는 것 같습니다.
Re: 파일의 사용여부를 알수 있는 방법이 있나요??
그 다른 프로그램이 소스를 수정할 수 없는 프로그램이 아니라면,
그냥 프로세스 공유 세마포어(IPC)를 쓰면 될 것 같은데요.
Orion Project : http://orionids.org
만약에 그 프로그램이 소스를 수정할수 없다면 어떻게 해야할지 갑자기궁
만약에 그 프로그램이 소스를 수정할수 없다면 어떻게 해야할지 갑자기
궁금해 지네요....
앞마당 먹고 시작한 저그의 8할은 뮤탈 테크를 먼저 탄다. 하지만 나머지 2할때문에 항상 스켄이 모자란다. - _-;
-..
이게 무슨 뜻인죠? --;
위에 어느 분이 소스까지 자세히 올려주셨는데.
첫째로
모든 프로세스가 동일한 locking방법을 사용해서
일단 파일에 동시에 접근하는 일은 없어야 할테고..
둘째로 화일에 쓴 프로세스가 FIFO등에 한바이트 쓰면
기다리는 프로세스는 FIFO에서 읽고 바로 파일을 읽으러
가면 될듯 하네여..
-..
이게 무슨 뜻인죠? --;
위에 어느 분이 소스까지 자세히 올려주셨는데.
첫째로
모든 프로세스가 동일한 locking방법을 사용해서
일단 파일에 동시에 접근하는 일은 없어야 할테고..
둘째로 화일에 쓴 프로세스가 FIFO등에 한바이트 쓰면
기다리는 프로세스는 FIFO에서 읽고 바로 파일을 읽으러
가면 될듯 하네여..
파일에다가 쓰는 프로그램을 말한겁니다. 쓰는 프로그램은 소스를 고칠수
파일에다가 쓰는 프로그램을 말한겁니다.
쓰는 프로그램은 소스를 고칠수 없을경우 어떻게 해야할지 궁금해 져서여..
-_-;;
앞마당 먹고 시작한 저그의 8할은 뮤탈 테크를 먼저 탄다. 하지만 나머지 2할때문에 항상 스켄이 모자란다. - _-;
댓글 달기