2009-10-30 5 views

답변

5

flock을 사용하여 두 프로그램을 조정할 수 있습니다. 첫 번째 프로그램은 파일을 잠그고 두 번째 프로그램도 잠금을 획득하려고 시도하며 첫 번째 프로그램이 잠금을 해제 할 때까지 차단합니다. Unix::Lsof

+0

이것은 올바른 해결책입니다. – MarkR

0

은 특히 당신이 유닉스에있어 경우에 열려있는 파일을 나열 할 lsof 명령에 래퍼가, 파일이 열려 있는지 여부 또는 사용 찾으려면? 그렇지 않으면 두 프로그램이 동기화되거나 파이프 또는 소켓을 통해 또는 파일의 존재/부재를 통해 통신 할 수 있습니다.

유닉스와 비슷한 시스템에서 다른 방향으로 사용하면 lsof 출력을 사용할 수 있습니다.

두 번째 프로그램을 시작하는 첫 번째 프로그램이 실행 가능하지 않다고 가정합니다.

+0

이렇게하면 비효율적이며 어떠한 경우에도 경쟁 조건이 발생할 수 있습니다. – MarkR

4

내 경험에 의하면 flock은 Windows와 Linux의 로컬 시스템에서 잘 작동합니다.

파일 처리가 끝나면 첫 번째 프로그램 exec 두 번째 프로그램이있을 수도 있습니다.

4

Windows에서 실행중인 경우 dwShareMode0 인 경우 CreateFile을 직접 호출 할 수 있습니다. MSDN에 따르면

:

은 삭제 읽거나 쓰기 액세스를 요청하는 경우 파일이나 장치를 여는 다른 프로세스를 방지합니다.

Win32API::File이 호출에 대한 액세스 권한을 부여합니다.

0

유닉스 사용자는 fuser으로 전화 할 수 있습니다.

0

상황에 대한 오해가있을 수 있으며 내 의견에 귀하의 경우에는 유용성이 제한 될 수 있지만 코드는/on을 (를) 사용하는 경우에 따라 달라질 수 있습니다. - 직렬 대기열을 사용하여 예측 가능한 순서로 실행되는 작업이 옵션 일 수 있음 . 응용 프로그램 (Perl로 작성)은 직렬 대기열을 명시 적으로 작성하고 관리해야합니다. 자세한 내용은 다음 링크를 참조하십시오. GCD

관련 문제