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