Если вы контролируете другой процесс (имеете исходный код), лучший план - использовать консультативные блокировки в обоих процессах. Эта блокировка определена в POSIX и будет переносимой во всех операционных системах.
В Linux вы можете использовать утилиту lsof , чтобы увидеть, какие файлы открываются другими процессами.
Это ограничено тем, для чего у вас есть разрешения - вы должны выполнить проверку как привилегированный пользователь, или вы получите результаты только для файлов, открытых тем же пользователем, что и тот, который выполняет проверку.
Я знаю только об утилите командной строки, а не о каком-либо системном вызове, который вы можете использовать непосредственно из кода C.
В Linux также возможно включить обязательную блокировку для данной файловой системы (mount -o mand) и установить специальные флаги для файла (chmod g-x, g + s). Затем, когда ваш процесс попытается получить блокировку записи, он потерпит неудачу, если другой процесс откроет файл. Это вряд ли когда-либо используется, но если вы полностью управляете рассматриваемой системой, это может быть вариантом.