Si controla el otro proceso (tiene código fuente), el mejor plan es usar bloqueos de aviso en ambos procesos. Este bloqueo se define en POSIX y será portátil en todos los sistemas operativos.
En Linux, puede usar la utilidad lsof para ver qué archivos están abiertos por otros procesos.
Esto se limita a lo que tiene permisos: tiene que hacer el control como usuario con privilegios, o solo obtendrá resultados para archivos abiertos por el mismo usuario que el que realiza el cheque.
Solo conozco la utilidad de línea de comandos, no de ninguna llamada al sistema que pueda usar directamente desde el código C.
En Linux, también es posible encender mandatory locking para un sistema de archivos determinado (mount -o demanda), y establecer marcas especiales sobre el archivo (chmod g-x, g + s). Luego, cuando su proceso intente adquirir un bloqueo de escritura, fallará si otro proceso tiene el archivo abierto. Esto casi nunca se usa, pero si controla completamente el sistema en cuestión, puede ser una opción.
+1 He estado buscando una aplicación que hace exactamente lo que hace handle.exe. Gracias ZombieSheep. – Kei