Переносимый способ (linux & Windows) - иметь файл, который можно изменить только одним процессом, а не другим в C / C ++

0

Я ищу портативный способ (linux & Windows), чтобы файл был модифицирован только одним процессом, а не другими в C/C++.

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

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

благодаря

  • 0
    Почему бы не установить свойство файла по умолчанию только для чтения, а затем заставить процесс изменить его на чтение + запись всякий раз, когда он хочет изменить этот файл.
  • 0
    Я очень сомневаюсь, что вы можете сделать это без изменения библиотеки вендора или, если это вообще возможно, добавления некоторых глобальных типов блокировок. Редизайн всей идеи, с использованием другого решения также может работать. [user986959 идея не сработает, так как после того, как вы измените режим, все остальные тоже будут допущены ...]
Показать ещё 7 комментариев
Теги:
winapi

1 ответ

1
Лучший ответ

Вы должны использовать "межпроцессные коммуникации",

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

    int WriteToFile()
    {
         HANDLE _mutex = CreateMutex(NULL, TRUE, L"__File_Write__");
         if(GetLastError() == ERROR_ALREADY_EXISTS) 
         {
             return -1;
         }
         else
         {
             //write to file
             return 0;
         }
    }
  • 0
    Я думал о чем-то подобном, но думал, что это нелегко переносить, если не найду способ обернуть коды Linux и Windows. Спасибо за детали однако.
  • 0
    Есть много библиотек потоков, которые абстрагируют эти детали

Ещё вопросы

Сообщество Overcoder
Наверх
Меню