Cada proceso tiene una tabla de descriptores de archivos (FDT) y cada archivo tiene un descriptor de archivos. Los descriptores de archivo para stdin, stdout y stderr son 0,1 y 2. Estos valores son los mismos para todos los procesos. El FDT creo que contiene referencias a las entradas INODE de esos archivos. Los descriptores de archivo se reutilizan en todos los procesos, es decir, no son globalmente únicos. ¿Hay un FDT global mantenido por kernel al que hace referencia cada FDT de proceso? ¿A qué se corresponden FDT para stdin, stdout y stderr? ¿Están estos archivos especiales vinculados al teclado, pantalla, etc. Proporcione enlaces a artículos, libros, etc.Ayuda con los descriptores de archivos en Unix
Respuesta
Un buen punto de partida es el artículo "A small trail through the Linux kernel" de 2001. Los mecanismos siguen siendo similares, aunque la implementación ha avanzado y se estudia mejor en a more recent kernel.
Dentro del kernel cada descriptor de archivo abierto corresponde a un struct file
, que contiene toda la información sobre el archivo o dispositivo abierto. El descriptor de archivo no es más que un índice en el FDT para el proceso. En el kernel de Linux, el struct file
está conectado al FDT mediante la función fd_install()
. El struct file
se puede reasignar a otro descriptor de archivo mediante el dup2
system call.
Los procesos pueden compartir el mismo FDT si los procesos fueron creados por la llamada al sistema clone
con el indicador CLONE_FILES
, pero no hay un FDT global. La operación normal fork
crea un nuevo FDT que es una copia del FDT padre. El uso práctico de esto es que cada subproceso de una aplicación multihebra sea un proceso clonado que comparte un FDT común, asegurando que todos los subprocesos puedan usar los mismos descriptores de archivos enteros. Si crea un nuevo proceso usando fork
/exec
, el nuevo proceso comienza con los mismos descriptores de archivo pero puede abrir y cerrar archivos sin afectar al elemento primario.
Las entradas de FDT para stdin, stdout, stderr se heredan del padre. No hay nada especial acerca de la implementación de kernel de estas tres entradas FDT; su significado proviene del uso convencional de la biblioteca C. El proceso principal solo decide a qué están conectados. Se pueden conectar a dispositivos de caracteres, o pueden haberse conectado a archivos o a tuberías. Para el caso del dispositivo de personaje, lo más normal es ser un dispositivo tty o pty. El libro gratis Linux Device Drivers tiene a good overview de estos.
- 1. ¿Entiendo cómo funcionan los descriptores de archivos Unix en C?
- 2. ¿Cómo funcionan los descriptores de archivos?
- 3. Hilos y descriptores de archivos
- 4. ¿Qué nombre de variable usas para los descriptores de archivos?
- 5. ¿Encontrar todos los archivos con cierta extensión en Unix?
- 6. sh: ¿Cómo evito los descriptores de archivos numerados?
- 7. Buscar archivos con tamaño en Unix
- 8. Evitando la reutilización de descriptores de archivos
- 9. ¿Crea un nuevo subproceso descriptores de archivos duplicados y descriptores de socket en Linux?
- 10. Archivos de formato UNIX con Powershell
- 11. Escribiendo a varios descriptores de archivos
- 12. Comparar descriptores SURF en una imagen con una lista de descriptores en otras imágenes
- 13. comparar dos archivos en UNIX
- 14. opencv FLANN con descriptores ORB?
- 15. ¿Cómo intercambiar nombres de archivos en Unix?
- 16. Descriptores de imagen con SIFT/VLFEAT
- 17. ¿Cómo ordenar los archivos de acuerdo con la marca de tiempo en Unix?
- 18. ¿Cómo puede select() esperar en los descriptores de archivos regulares (no sockets)?
- 19. ¿Se comparten descriptores de archivos al tenedor() ing?
- 20. descriptores de archivos múltiples a un mismo archivo, C
- 21. Vim (Windows): los nuevos archivos de ayuda no funcionan
- 22. Ayuda con los eventos de WPF TextCompositionManager
- 23. Unix find with GNU Make para actualizar automáticamente los archivos
- 24. Unix find: lista de archivos de stdin
- 25. no podía leer los descriptores de archivos canal de entrada de la parcela
- 26. Copie archivos omitiendo archivos existentes - Unix
- 27. ¿Cuál es el problema con los archivos de ayuda en estos días?
- 28. Comando UNIX para listar carpetas con conteos de archivos
- 29. ¿Cómo manejar con mayor eficiencia un gran número de descriptores de archivos?
- 30. unix: fusiona 2 archivos usando 2das columnas
Al final del párrafo 3, creo que quiere decir que un proceso secundario puede abrir y cerrar archivos * sin * afectar al padre –