файл txt. Пишут его процессы разных пользователей. Что я не очень понимаю: например, пишет первый exe в этот txt, и еще не дописал, а в этот момент второй exe начинает писать, натыкается на то, что файл занят первым exe. То есть как принято решать тривиальную задачу записи лога множеством процессов? Или использовать winapi lockfile?
Ну просто так без лока файла на запись действительно не выйдет, поэтому часто экзешники либо в разные файлы пишут либо в раме собирают записи и потом их кучкой пишут в файл
Да, наверное, lockfile буду использовать. Есть же старая 1С 77, и она корректно пишет когда запущено много её экземпляров различными пользовптелями. Не знаю как она это делает, но подозреваю что блочет буфер, на размер записываемых каждым пользователем данных лога.
Ну вообще лочить файл частично можно но я напрямую с этим не встречаласб
Можно использовать мютекс
Да, спасибо, уже тоже наткнулся на это решение. Завтра попробую.
Мютекст поможет, если написанные тобою программы пишут в файл
Вообще для корректной запили логов нескольких приложений используют лог-процессоры, вроде Fluent Bit и т.д. или системный журнал. А если это обычное пользовательское приложение используют отдельные лог файлы на каждое приложение. Но вообще 1. Для одновременной работы с файлом на чтение и запись есть примитивы синхронизации вроде FileStream.Lock для блокировок сегментов файла или выставление блокировок на чтение и запись файла. 2. В случае многопроцесной записи все зависит от стандартов - на уровне стандарта POSIX гарантируется, что в случае, когда запись выполняется единственным системным вызовом write, а файл был открыт в режиме "для добавления", то запись должна выглядеть атомарно. То есть в случае записи логов в один файл - каждый запишет свои данные и содержимое файла останется консистентным.
Т.е. в случае единичного обращения к файлу на запись ситуации «еще не дописал» не должно возникнуть.
Обсуждают сегодня