GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué el descriptor de archivo se abre y se lee solo una vez?

¿Por qué se puede usar solo 1 vez cuando abrimos el descriptor de archivo y lo redirigimos a stdin?
Mire el siguiente ejemplo para entender lo que quiero decir. Después de leerlo una vez con el comando cat, el archivo no se lee a través del mismo descriptor de archivo por segunda vez.

└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$

Respuesta aceptada:

Para imprimir el archivo, el primer cat hay que leerlo hasta el final. exec 6< input.txt hace que el shell contenga el descriptor del archivo hasta que el
shell muera o lo cierre, por lo que el desplazamiento del archivo aún apunta al final del archivo
cuando el segundo cat se invoca, que por lo tanto no escribe nada en stdout.

Si está en un sistema basado en Linux, puede ver que eso sucede al mirar la información del descriptor del archivo:

echo "File contents" > input.txt
exec 6< input.txt
cat "/proc/$$/fdinfo/6"
cat <&6
cat "/proc/$$/fdinfo/6"
cat <&6

Si ejecuta ese script, obtendrá algo como

pos:    0
flags:  0100000
mnt_id: 113
File contents
pos:    14
flags:  0100000
mnt_id: 113

confirmando que el desplazamiento (pos ) no es 0
cuando el segundo cat se ejecuta, sino que apunta a su final.

Para restablecer el desplazamiento, puede agregar otro exec 6< input.txt entre el cat s.


Linux
  1. ¿La diferencia entre .exrc y .vimrc?

  2. ¿Por qué Ls -l no muestra la hora o el año de cada archivo?

  3. ¿Por qué Ls y Hexdump no están de acuerdo sobre el tamaño del archivo?

  4. ¿Por qué Regex en Bash funciona solo si es una variable y no directamente?

  5. ¿Por qué bifurcar mi proceso hace que el archivo se lea infinitamente?

Echo To File Descriptor sobrescribe el archivo?

¿Redireccionamiento de Io y el comando principal?

¿Por qué se usa select en Linux?

Ventajas de cat'ing file y piping a grep

¿Por qué el directorio raíz se indica con un signo /?

Linux + cómo dar solo a un usuario específico para leer el archivo