открыт для записи, но не эксклюзив - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу использовать fopen("file", "w"), чтобы открыть файл для записи, но не исключительно.Т.е. я хочу, чтобы другой процесс прочитал файл, пока он еще открыт.

Обратите внимание, что у меня сбрасывается после каждой строки, поэтому я ничего не пропущу.Запись будет бездействовать, когда другой процесс читает файл.

В документации не упоминается эксклюзив, но эксперимент показывает, что он эксклюзив.

Есть ли способ?

1 Ответ

0 голосов
/ 11 февраля 2019

Общий доступ к файлам - особенность ОС.fopen слишком универсален и не обеспечивает такого контроля.Вам нужно будет использовать что-то более конкретное.Если вы используете платформу Microsoft (при условии, что вы пометили для VS 2015), вы можете использовать _fsopen или _wfsopen - у них есть третий параметр для указания общего доступа.

_fsopen("file", "w", _SH_DENYWR);

thisоткроет файл для записи и позволит другим читать из него (но не записывать в него).

Аргумент shflag - это константное выражение, состоящее из одной из следующих констант манифеста, определенных вShare.h.

  • Определение термина
  • _SH_COMPAT Устанавливает режим совместимости для 16-битных приложений.
  • _SH_DENYNO Разрешает чтение и запись.
  • _SH_DENYRD Запрещает доступ на чтение к файлу.
  • _SH_DENYRW Запрещает доступ на чтение и запись к файлу.
  • _SH_DENYWR Запрещает доступ на запись в файл.

Другие ОС / платформы также могут поддерживать некоторые варианты fsopen.

...