GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi le descripteur de fichier est-il ouvert et lu une seule fois ?

Pourquoi ne peut-il être utilisé qu'une seule fois lorsque nous ouvrons nous-mêmes le descripteur de fichier et que nous le redirigeons vers stdin ?
Veuillez consulter l'exemple ci-dessous pour comprendre ce que je veux dire. Après l'avoir lu une fois avec la commande cat, le fichier n'est pas lu une deuxième fois via le même descripteur de fichier.

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

Réponse acceptée :

Pour imprimer le fichier, le premier cat il faut le lire jusqu'au bout. exec 6< input.txt oblige le shell à conserver le descripteur de fichier jusqu'à ce que le
shell meure ou le ferme, de sorte que le décalage du fichier pointe toujours vers la fin du
fichier lorsque le second cat est invoqué, qui n'écrit donc rien sur stdout.

Si vous êtes sur un système basé sur Linux, vous pouvez voir ce qui se passe en consultant les informations du descripteur de fichier :

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

Si vous exécutez ce script, vous obtiendrez quelque chose comme

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

confirmant que le décalage (pos ) n'est pas 0
lorsque le deuxième cat est exécuté, mais pointe vers sa fin.

Pour réinitialiser le décalage, vous pouvez ajouter un autre exec 6< input.txt entre le cat s.


Linux
  1. Lire et écrire des données de n'importe où avec la redirection dans le terminal Linux

  2. Lire et écrire dans le même fichier sous Linux sans l'écraser ??

  3. Linux - Décompresser et désarchiver le fichier .tar.gz à l'aide de Cat, Tar et Gzip sur une seule ligne de commande ?

  4. La différence entre .exrc et .vimrc ?

  5. L'écho au descripteur de fichier écrase le fichier ?

Tail lit-il tout le fichier ?

Pourquoi select est-il utilisé sous Linux

Pourquoi le montage ne respecte-t-il pas l'option de lecture seule pour les montages liés ?

Linux + comment ne donner qu'à un utilisateur spécifique pour lire le fichier

Quelle est la commande pour copier, lire et supprimer un fichier sous Linux

Grep dans un énorme fichier journal (> 14 Go) uniquement les derniers x Go ?