J'ai trouvé que si je transfère une grande quantité de données entre deux processus via pipe, un fichier temporaire sera créé par linux dans le répertoire / tmp. Si l'opération de canal réussit, le fichier temporaire correspondant sera automatiquement supprimé par le système d'exploitation. Mais si l'opération a échoué, le fichier tmp reste là.
Pour une raison quelconque, je ne veux pas que l'utilisateur ait l'opportunité d'obtenir les données que j'ai transférées via le canal, donc je ne veux rien laisser sur le disque dur même si mon programme s'est écrasé. Comment puis-je faire ceci?
sender > filename
thenreceiver < filename
. Je vérifierais le fichier tmp pendant les deux opérations, pour voir si l'expéditeur ou le destinataire le fait.mkfifo
tube créé ne fait jamais de tampon (du tout!) Et ne crée jamais de fichiers.Réponses:
les canaux ne stockent pas de données sur le disque. / bin / echo foo | la barre grep ne crée aucun fichier. essayez
strace -f sh -c '/bin/echo foo | grep bar'
de voir tous les appels système effectués par un shell lors de l'exécution d'un pipeline.echo
est un shell intégré, j'ai donc suggéré/bin/echo
de faire tourner le shell en exécutable./tmp
n'a pas besoin d'être sur le disque. Il peut être monté sur tmpfs (c'est-à-dire soutenu par de la mémoire virtuelle). Notez qu'un redémarrage sera vide/tmp
dans ce cas, donc utilisez-le/var/tmp
pour tout ce que vous voulez laisser.Si ce que vous faites est de mettre des données dans un fichier, cela n'utilise pas de canal. Si le fichier est un fifo, pas un fichier normal, il s'agit simplement d'un rendez-vous nommé et ne contient pas de données. Utilisez ls -l pour le savoir.
Et notez que si vous espérez empêcher les utilisateurs de voir ce qui se passe dans les tuyaux dans les processus qu'ils possèdent, vous êtes à peu près SOL, car vous
strace
pouvez inspecter tout ce qu'un processus fait qui interagit avec tout ce qui se trouve en dehors du processus, à l'exception de la lecture / écriture partagée mappée. Mémoire.ltrace
est encore plus invasif. Si votre programme s'exécute sur des systèmes où l'utilisateur local a root, vous ne pouvez pas les arrêter du tout. Sous Unix, root peut tout faire et dispose d'outils puissants à cet effet.la source
Un vrai tube est un bloc de mémoire dans le noyau, un tampon qui est lu / écrit par certains processus. Il ne crée de fichiers nulle part.
Certaines applications ont des options qui basculent entre l'utilisation de tuyaux (plus rapide, sans disque, prend un peu plus de mémoire) et l'utilisation de fichiers temporaires (prend un peu moins de mémoire, vous permet éventuellement de voir les fichiers temporaires, un peu plus lentement).
gcc
est une de ces applications, mais il en existe probablement d'autres.la source
Piratage sale: cryptez les données avant d'envoyer et décryptez-les à la réception si vous pouvez modifier les deux processus ...
la source