Есть ли способ открыть файл неисключительным способом,
Да, используя Win32, передавая различные флаги FILE_SHARE_Xxxx в CreateFile.
это кроссплатформенный?
Нет, требуется код для конкретной платформы.
Из-за досадных проблем обратной совместимости (приложения DOS, будучи однозадачными, предполагают, что ничто не может удалить файл из-под них, т. Е. Что они могут fclose () и затем fopen () без каких-либо проблем; Win16 сохранил это Предположение об упрощении переноса приложений DOS, Win32 сохранило это предположение об упрощении переноса приложений Win16, и это ужасно), Windows по умолчанию открывает исключительно файлы.
Базовая инфраструктура ОС поддерживает удаление / переименование открытых файлов (хотя я полагаю, что есть ограничение на удаление файлов, отображаемых в память, что, я думаю, не является ограничением, обнаруженным в * nix), но семантика открытия по умолчанию не надо.
C ++ не имеет ни малейшего представления об этом; операционная среда C ++ во многом аналогична операционной среде DOS - другие приложения не работают одновременно, поэтому нет необходимости управлять совместным использованием файлов.