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
1278 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!

source:stackoverflow.com
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