C: есть ли способ предотвратить повторное открытие файла? - PullRequest
1 голос
/ 30 мая 2019

Я хочу, чтобы каждый файл мог открываться не более одного раза за раз. Например, у меня есть такой файл c

int main()
{
  const char *filename = "test";
  fun1();
  fun2();
  ...
}

void fun1()
{
  fd_1 = open(filename, O_RDWR | O_CREAT | O_APPEND, 0666);
}

void fun2()
{
  fd_2 = open(filename, O_RDWR | O_CREAT | O_APPEND, 0666);
}

т.е. чтобы fun2 не открывал test до того, как file_descriptor его закрыл файл. Есть ли способ сделать это? (кроме сканирования каталога fd/)

1 Ответ

1 голос
/ 30 мая 2019

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

Простое решение для вашей цели - добавление файла журнала - открыть файл в режиме O_APPENDв main и передайте дескриптор fun1 и fun2 или сделайте его глобальной переменной.В зависимости от деталей fun1 и fun2 и наличия вложенных вызовов, вывод в файл журнала может смешиваться нежелательным образом.Для этой проблемы может потребоваться реорганизация функций вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...