Нужно открыть хэндл на запись и запретить писать другим, но разрешить другим читать. Делаю так:
HANDLE f1 = ::CreateFile(path, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// здесь получаю ошибку ERROR_SHARING_VIOLATION
HANDLE f2 = ::CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
Что делаю не так ?
Здравствуйте, maks1180, Вы писали:
M>HANDLE f1 = ::CreateFile(path, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
M>// здесь получаю ошибку ERROR_SHARING_VIOLATION
M>HANDLE f2 = ::CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
M>Что делаю не так ?
А погуглить? Буквально первая же ссылка —
https://docs.microsoft.com/en-us/windows/win32/fileio/creating-and-opening-files
Идея в том, что ты при втором открытии должен разрешить шаре райт, так как ты уже открыл его на запись.
Если у тебя один писатель/один читатель, то просто GENERIC_X и FILE_SHARE_Y — X/Y должны поменяться местами