Maison > développement back-end > Golang > Comment rendre la sortie (stdout, stderr) de n'importe quelle commande shell sans tampon ?

Comment rendre la sortie (stdout, stderr) de n'importe quelle commande shell sans tampon ?

王林
Libérer: 2024-02-06 09:12:10
avant
1483 Les gens l'ont consulté

如何使任何 shell 命令的输出(stdout、stderr)不缓冲?

Contenu de la question

Existe-t-il un moyen d'exécuter une commande shell sans mise en mémoire tampon de sortie ?

Par exemple, hexdump 文件 | ./my_script ne transmettra l'entrée de hexdump à my_script que par morceaux mis en mémoire tampon, et non ligne par ligne.

Quelle est la solution générale pour rendre la sortie d'une commande sans tampon ?


Bonne réponse


Pour autant que je sache, vous ne pouvez pas faire cela sans un vilain hack. L'écriture dans un tube (ou la lecture à partir d'un tube) active automatiquement la mise en mémoire tampon complète, vous ne pouvez rien y faire :-(. La "mise en mémoire tampon de ligne" (ce que vous voulez) n'est utilisée que lors de la lecture/écriture sur le terminal. C'est exactement ce qu'ils font : ils connectent le programme à un pseudo-terminal afin que les autres outils du pipeline lisent/écrivent à partir de ce terminal en mode tampon de ligne. L'ensemble du problème est décrit comme suit :

.

La page fournit également quelques suggestions (les « vilains hacks » susmentionnés) pour réaliser certaines astuces en utilisant unbuffer 或使用 LD_PRELOAD.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal