[상황] Pa와 Pb라는 프로세스(혹은 쓰레드)가 존재하며 F라는 파일을 공통으로 사용하려고 합니다. | |
1. Pa가 F를 사용하기 위하여 F를 오픈합니다. 3. Pa가 F에 대해 File Lock을 요청합니다. 6. F에 대한 Lock을 획득한 Pa는 F를 사용합니다. 7. F에 대한 Lock을 반환합니다. | 2. Pb가 F를 사용하기 위하여 F를 오픈합니다. 4. Pb가 F에 대해 File Lock을 요청합니다. 5. F에 대한 Lock을 획득하지 못하고 대기합니다. 8. F에 대한 Lock을 획득하고 이를 사용합니다. 9. F에 대한 Lock을 반환합니다. |
#include #include int main(int argc, char* argv[]) fd=open(“locktest”, O_RDWR); return 0; |
#include #include int main(int argc, char* argv[]) fd=open(“locktest”, O_RDWR); return 0; |
cc -o Pb Pb.c
Pa&
Pb&
#include #include #include #include int main(int argc, char* argv[]) fp=fopen(“locktest”, “r+b”); return 0; |
#include #include #include #include int main(int argc, char* argv[]) fp=fopen(“locktest”, “r+b”); return 0; |
cc -o Pb Pb.c
Pa&
Pb&
LPCTSTR lpFileName, // pointer to name of the file
DWORD dwDesiredAccess, // access (read-write) mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes
DWORD dwCreationDisposition, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to file with attributes to copy
);
HANDLE hFile, // handle of file to lock
DWORD dwFileOffsetLow, // low-order word of lock region offset
DWORD dwFileOffsetHigh, // high-order word of lock region offset
DWORD nNumberOfBytesToLockLow, // low-order word of length to lock
DWORD nNumberOfBytesToLockHigh // high-order word of length to lock
);
HANDLE hFile, // handle of file to unlock
DWORD dwFileOffsetLow, // low-order word of lock region offset
DWORD dwFileOffsetHigh, // high-order word of lock region offset
DWORD nNumberOfBytesToUnlockLow, // low-order word of length to unlock
DWORD nNumberOfBytesToUnlockHigh // high-order word of length to unlock
);
#include int main(int argc, char *argv[]) |
#include int main(int argc, char *argv[]) |
#include int main(int argc, char *argv[]) loop: return 0; |
#include int main(int argc, char *argv[]) loop: return 0; |
#include int main(int argc, char* argv[]) overlapped.Offset=0; hFile=CreateFile(“C:\locktest”, GENERIC_READ|GENERIC_WRITE, if(hFile!=INVALID_HANDLE_VALUE){ return 0; |