Maison > Article > développement back-end > Comment rendre la sortie (stdout, stderr) de n'importe quelle commande shell sans tampon ?
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 ?
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!