flockとかfsyncがなくてダメな感じ。
systems.h
#include <io.h>
#include <windows.h>
#define UNLOCK_FILE(dbf) { \
HANDLE h = (HANDLE)_get_osfhandle(dbf->desc); \
if (INVALID_HANDLE_VALUE != h) { \
UnlockFile(h, 0, 0, (DWORD)-1, (DWORD)-1); \
} \
}
#define READLOCK_FILE(dbf) { \
HANDLE h = (HANDLE)_get_osfhandle(dbf->desc); \
if (INVALID_HANDLE_VALUE == h) { \
lock_val = -1; \
} else { \
OVERLAPPED over; \
ZeroMemory(&over, sizeof(over)); \
DWORD flags = LOCKFILE_FAIL_IMMEDIATELY; \
if (!LockFileEx(h, flags, 0, (DWORD)-1, (DWORD)-1, &over)) { \
lock_val = -1; \
} else { \
lock_val = 0; \
} \
} \
}
#define WRITELOCK_FILE(dbf) { \
HANDLE h = (HANDLE)_get_osfhandle(dbf->desc); \
if (INVALID_HANDLE_VALUE == h) { \
lock_val = -1; \
} else { \
OVERLAPPED over; \
ZeroMemory(&over, sizeof(over)); \
DWORD flags = LOCKFILE_FAIL_IMMEDIATELY | LOCKFILE_EXCLUSIVE_LOCK; \
if (!LockFileEx(h, flags, 0, (DWORD)-1, (DWORD)-1, &over)) { \
lock_val = -1; \
} else { \
lock_val = 0; \
} \
} \
}
0 件のコメント:
コメントを投稿