Cómo verificar si alguien está tratando de abrir un archivo en mi computadora en Python o C ++

Básicamente, los archivos y el proceso son las dos cosas fundamentales en cualquier sistema operativo.

No tengo conocimiento sobre las estructuras internas de datos del archivo del núcleo cuando se trata de Windows, pero básicamente:

En sistemas basados ​​en IX, a saber. Linux / Unix / Mac OSX, el concepto de “nombres de archivo” es para los usuarios. El sistema operativo o el núcleo los reconoce por sus “INODOS”.

Hay un inodo para cada archivo, básicamente, una relación uno a uno. Un solo inodo no puede representar múltiples archivos y un archivo no tiene múltiples inodos.

Ahora, las estructuras de datos del núcleo, o simplemente, las cosas que el núcleo utiliza para proporcionarnos a los usuarios ingenuos SUBSISTEMA DE ARCHIVO eficiente:

  1. Tabla de Inode In-core (tiene metadatos de todos los archivos abiertos activamente)
  2. Tabla de archivos
  3. Tabla de descriptor de archivos de usuario

En las Estructuras de datos mencionadas anteriormente, solo el UFDT es por proceso. El resto de los 2 son de todo el sistema. Su funcionamiento no está dentro del alcance de esta pregunta. Pero te sugiero que leas eso. ¡Es simplemente increíble!

Ahora, responde a tu pregunta:

Cada vez que se abre un archivo, su inodo se lleva al IIT y el campo reference_count se establece en 1.

Si alguien abre ese archivo nuevamente, dado que el inodo ya está allí en el IIT, solo se incrementa el número de referencia, que ahora se convertirá en 2. Del mismo modo …

Sin embargo, el núcleo solo puede acceder a IIT, UFDT y FT. Por lo tanto, probablemente debería escribir un módulo de kernel e insertarlo en el kernel, que puede mantener un archivo con todos los nombres de archivo abiertos (nombres o puede decir, ruta). Esto solo es posible fácilmente con el kernel de Linux, tanto Windows como Mac son de código cerrado.

¡Buena suerte! Happy Coding 🙂

PD: mejor hablas con el C en C ++ 🙂 Y si no quieres usar todo esto, puedes configurar un cron para que el comando lsof se ejecute después de decir, cada 30/60 segundos. También puede formatear la salida de la manera que desee. 🙂 Linux + Unix + Mac OSX + Windows (ojalá cygwin o minGW sean compatibles con lsof: P)

En Linux hay inotify (7): página de manual de Linux que le informa sobre el acceso a los archivos. Además, fanotify (7): la página del manual de Linux le brinda la oportunidad de controlar / denegar dicho acceso.

No he trabajado con acceso a archivos en Windows, pero encontré esto:

Introducción a la API de antivirus

Ambos métodos son útiles para crear software antivirus.

Disfrutar.

¿Estás seguro de que es posible? Porque lo dudo, al menos en Linux (a continuación, podría ayudar también para Windows con Cygwin …) …

Allí puede usar lsof para ver los archivos abiertos. Puede usar eso desde Python (y / o sed / awk), excepto por:

Si abrieras un archivo y dijeras que el cambio fue realmente rápido y lo cerraste, te lo perderías.

Entonces, lo que busca es registrar una devolución de llamada cuando se abre un archivo (no estoy seguro de que esté disponible), o sondear para ver si está abierto en este momento (o en un bucle, pero no importa qué tan rápido, puede perderlo ..).

La forma correcta de controlar el acceso es con permisos.