Il y a deux façons très simples pour laisser un programme envoyer un flux de données à un autre:techniques pour tuyaux infiniment longues
- tuyau Unix, ou socket TCP, ou quelque chose comme ça. Cela nécessite une attention constante de la part du programme consommateur, ou un programme producteur bloquera. Même en augmentant les tampons de leurs valeurs par défaut minuscules, c'est toujours un énorme problème.
- Fichiers plains - le programme producteur est ajouté avec
O_APPEND
, le consommateur lit juste quelles que soient les nouvelles données disponibles à sa convenance. Cela ne nécessite aucune synchronisation (tant que diskspace est disponible), mais les fichiers Unix ne supportent que la troncature à la fin, pas au début, donc ils rempliront le disque jusqu'à ce que les deux programmes se terminent.
Existe-t-il un moyen simple d'avoir les deux sens, avec les données stockées sur le disque jusqu'à ce qu'il soit lu, puis libéré? Évidemment, les programmes peuvent communiquer via un serveur de base de données ou quelque chose comme ça, et ne pas avoir ce problème, mais je cherche quelque chose qui s'intègre bien avec la tuyauterie Unix normale.
J'ai regardé la documentation, et il n'est pas évident de savoir comment utiliser socat pour ce que je veux. Disons que pour simplifier j'ai exactement un producteur et exactement un consommateur, et je veux un tuyau infini entre eux. Comment utiliser socat pour ça? – taw