Я соглашаюсь с japollock путем там - бросают acception, когда Вы не уверены в результате операции. Вызовы к API, получая доступ к файловым системам, вызовам базы данных, и т.д. Каждый раз, когда Вы перемещаетесь мимо "границ" Ваших языков программирования.
я хотел бы добавить, не стесняйтесь выдавать стандартное исключение. Если Вы не собираетесь сделать что-то "различное" (проигнорируйте, пошлите по электронной почте, зарегистрируйте, покажите, что штука изображения кита Твиттера, и т.д.), затем не беспокоятся за пользовательскими исключениями.
Выкопать эту информацию - это большая работа (вам придется искать через / proc / * / fd Лучше использовать любой из:
обычно вы не можете этого сделать по разным причинам (например, вы не можете сказать, открыт ли файл другим пользователем) .
Если вы можете управлять процессами, открывающими файл, и пытаетесь избежать коллизий, блокируя файл (для этого есть много библиотек в Linux)
Я не думаю, что есть какой-либо способ сделать это на чистом C (это не t быть кроссплатформенным).
Если вы знаете, какие файлы вы используете заранее, вы можете использовать inotify , чтобы получать уведомления об их открытии.
C имеет средства для работы с файлами, но не особо для получения информации о них. В портативном языке C единственное, что вы можете сделать, это попытаться открыть файл желаемым образом и посмотреть, работает ли он.
в большинстве дистрибутивов есть команда lsof, которая показывает все открытые в данный момент файлы, вы можете, конечно, grep выводить ее, если ваши файлы находятся в том же каталоге или имеют какой-то узнаваемый шаблон имени.
Если вы контролируете и производителя, и потребителя, вы можете использовать lockf () of flock () для блокировки файла.