Как я могу сказать, открыт ли файл в другом месте в C на Linux?

Я соглашаюсь с japollock путем там - бросают acception, когда Вы не уверены в результате операции. Вызовы к API, получая доступ к файловым системам, вызовам базы данных, и т.д. Каждый раз, когда Вы перемещаетесь мимо "границ" Ваших языков программирования.

я хотел бы добавить, не стесняйтесь выдавать стандартное исключение. Если Вы не собираетесь сделать что-то "различное" (проигнорируйте, пошлите по электронной почте, зарегистрируйте, покажите, что штука изображения кита Твиттера, и т.д.), затем не беспокоятся за пользовательскими исключениями.

7
задан pupeno 6 July 2009 в 14:22
поделиться

7 ответов

Выкопать эту информацию - это большая работа (вам придется искать через / proc / * / fd Лучше использовать любой из:

  • Сохранить в темп, а затем переименовать. Либо запишите свои файлы во временное имя файла или каталог, когда вы закончите писать, переименуйте его в каталог, в котором ваше приложение их читает. Переименование является атомарным, поэтому, когда файл присутствует, вы знаете, что его безопасно читать.
  • Может быть, вариант выше, когда вы закончите писать файл foo , вы создадите пустой файл с именем foo.finished . Вы ищите наличие * .finished при обработке файлов.
  • Блокируйте файлы во время записи, таким образом, чтение файла будет блокироваться до тех пор, пока писатель не разблокирует его. См. Функции flock / lockf , они рекомендательные блокировки, поэтому и читатель, и писатель должны блокировать и соблюдать блокировки.
5
ответ дан 7 December 2019 в 05:27
поделиться

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

Если вы можете управлять процессами, открывающими файл, и пытаетесь избежать коллизий, блокируя файл (для этого есть много библиотек в Linux)

0
ответ дан 7 December 2019 в 05:27
поделиться

Я не думаю, что есть какой-либо способ сделать это на чистом C (это не t быть кроссплатформенным).

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

3
ответ дан 7 December 2019 в 05:27
поделиться

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

0
ответ дан 7 December 2019 в 05:27
поделиться

Используйте команду lsof. (Список открытых файлов).

0
ответ дан 7 December 2019 в 05:27
поделиться

в большинстве дистрибутивов есть команда lsof, которая показывает все открытые в данный момент файлы, вы можете, конечно, grep выводить ее, если ваши файлы находятся в том же каталоге или имеют какой-то узнаваемый шаблон имени.

0
ответ дан 7 December 2019 в 05:27
поделиться

Если вы контролируете и производителя, и потребителя, вы можете использовать lockf () of flock () для блокировки файла.

0
ответ дан 7 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

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