GNU/Linux >> Tutoriels Linux >  >> Linux

`unbuffer` ou `stdbuf` pour supprimer la mise en mémoire tampon Stdout ?

Y a-t-il une différence entre unbuffer(1) et stdbuf(1) ? D'après ce que j'ai compris, unbuffer fait plus que le "meilleur effort" d'appeler la fonction libc set(X)buf au début, puis de laisser faire ?

Réponse acceptée :

Ils fonctionnent de manière complètement différente.

Le programme unbuffer utilise expect pour exécuter la commande nommée. Étant donné que expect crée un pseudo-tty à attacher à la stdout du processus enfant, l'enfant pourrait être trompé en pensant qu'il devrait utiliser la mise en mémoire tampon de ligne au lieu de la mise en mémoire tampon de bloc. Certains programmes changeront leur comportement lorsque isatty(stdout) est vrai, d'autres non et il est très difficile de savoir lequel le fera et lequel ne le fera pas.

Le programme stdbuf tente de placer libstdbuf devant libc pour les binaires chargés dynamiquement. Où libstdbuf redéfinit la stratégie de mise en mémoire tampon par défaut des appels libc stdio.

J'ai découvert cela par

 apt-get source expect coreutils

et lire la source pertinente pour chaque programme.


Linux
  1. Comprendre YAML pour Ansible

  2. YAML pour les débutants

  3. DNF pour les utilisateurs APT

  4. Supprimer Stdout d'une commande pendant T secondes ?

  5. emplacement de la source libc - pour le téléchargement ou la visualisation en ligne ?

4 distributions Linux pour les jeux

Une introduction à bpftrace pour Linux

Choisir une imprimante pour Linux

Bash pour la boucle

Guide complet pour supprimer les images Docker

Pourquoi nm n'affiche aucun symbole pour /lib/i386-linux-gnu/libc.so.6 ?