170 похожих чатов

Здравствуйте. Подскажите прототип действий, когда нужно писать обычный лог в

файл txt. Пишут его процессы разных пользователей. Что я не очень понимаю: например, пишет первый exe в этот txt, и еще не дописал, а в этот момент второй exe начинает писать, натыкается на то, что файл занят первым exe. То есть как принято решать тривиальную задачу записи лога множеством процессов? Или использовать winapi lockfile?

10 ответов

21 просмотр

Ну просто так без лока файла на запись действительно не выйдет, поэтому часто экзешники либо в разные файлы пишут либо в раме собирают записи и потом их кучкой пишут в файл

LONG- Автор вопроса
Liza 丽莎
Ну просто так без лока файла на запись действитель...

Да, наверное, lockfile буду использовать. Есть же старая 1С 77, и она корректно пишет когда запущено много её экземпляров различными пользовптелями. Не знаю как она это делает, но подозреваю что блочет буфер, на размер записываемых каждым пользователем данных лога.

LONG
Да, наверное, lockfile буду использовать. Есть же ...

Ну вообще лочить файл частично можно но я напрямую с этим не встречаласб

Можно использовать мютекс

LONG- Автор вопроса
Олег
Можно использовать мютекс

Да, спасибо, уже тоже наткнулся на это решение. Завтра попробую.

LONG
Да, спасибо, уже тоже наткнулся на это решение. За...

Мютекст поможет, если написанные тобою программы пишут в файл

Вообще для корректной запили логов нескольких приложений используют лог-процессоры, вроде Fluent Bit и т.д. или системный журнал. А если это обычное пользовательское приложение используют отдельные лог файлы на каждое приложение. Но вообще 1. Для одновременной работы с файлом на чтение и запись есть примитивы синхронизации вроде FileStream.Lock для блокировок сегментов файла или выставление блокировок на чтение и запись файла. 2. В случае многопроцесной записи все зависит от стандартов - на уровне стандарта POSIX гарантируется, что в случае, когда запись выполняется единственным системным вызовом write, а файл был открыт в режиме "для добавления", то запись должна выглядеть атомарно. То есть в случае записи логов в один файл - каждый запишет свои данные и содержимое файла останется консистентным.

Ярослав
Вообще для корректной запили логов нескольких прил...

Т.е. в случае единичного обращения к файлу на запись ситуации «еще не дописал» не должно возникнуть.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта