Odkryłem, że jeśli przesyłam dużą ilość danych między dwoma procesami za pomocą potoku, jakiś plik tymczasowy zostanie utworzony przez linux w katalogu / tmp. Jeśli operacja potoku zakończy się powodzeniem, odpowiedni plik tymczasowy zostanie automatycznie usunięty przez system operacyjny. Ale jeśli operacja się nie powiedzie, plik tmp pozostaje tam.
Z jakiegoś powodu nie chcę, aby użytkownik miał możliwość uzyskania danych, które przesłałem przez trhough, więc nie chcę pozostawiać niczego na dysku twardym, nawet jeśli mój program się zawiesił. W jaki sposób mogę to zrobić?
sender > filename
wtedyreceiver < filename
. Sprawdziłbym plik tmp podczas obu operacji, aby sprawdzić, czy nadawca lub odbiorca to robi.mkfifo
utworzona rura nigdy nie buforuje (wcale!) I nigdy nie tworzy plików.Odpowiedzi:
potoki nie przechowują danych na dysku. / bin / echo foo | pasek grep nie tworzy żadnych plików. spróbuj
strace -f sh -c '/bin/echo foo | grep bar'
zobaczyć wszystkie wywołania systemowe wykonane przez powłokę podczas uruchamiania potoku.echo
jest wbudowaną powłoką, więc zasugerowałem,/bin/echo
aby powłoka działała jako plik wykonywalny./tmp
nie musi być na dysku. Może być montowany na tmpfs (tzn. Wspierany przez pamięć wirtualną). Pamiętaj, że/tmp
w takim przypadku ponowne uruchomienie będzie puste , więc używaj/var/tmp
do wszystkiego, co chcesz zostawić.Jeśli to, co robisz, polega na umieszczeniu danych w pliku, to nie używa potoku. Jeśli plik jest plikiem piątym, a nie zwykłym, to jest to tylko nazwane miejsce spotkania i nie zawiera danych. Użyj ls -l, aby się dowiedzieć.
I zauważ, że jeśli chcesz powstrzymać użytkowników przed zobaczeniem, co przechodzi przez potoki w procesach, których są właścicielami, jesteś
strace
praktycznie SOL, ponieważ może sprawdzić wszystko, co robi proces, który wchodzi w interakcję z czymkolwiek poza procesem, z wyjątkiem odczytu / zapisu współdzielonego mmapped pamięć.ltrace
jest jeszcze bardziej inwazyjny. Jeśli twój program będzie działał na systemach, na których lokalny użytkownik ma root, nie możesz ich w ogóle zatrzymać. W Uniksie root może robić wszystko i ma do tego potężne narzędzia.źródło
Prawdziwy potok to blok pamięci w jądrze, bufor odczytywany / zapisywany przez niektóre procesy. Nigdzie nie tworzy plików.
Niektóre aplikacje mają opcje przełączania między używaniem potoków (szybsze, bez uderzania dysku, zajmuje trochę więcej pamięci) a używaniem plików tymczasowych (zajmuje nieco mniej pamięci, pozwala ewentualnie zobaczyć pliki tymczasowe, dotyk wolniej).
gcc
jest jedną z takich aplikacji, choć prawdopodobnie są inne.źródło
Brudny włamanie: Szyfruj dane przed wysłaniem i odszyfruj je po otrzymaniu, jeśli możesz zmienić oba procesy ...
źródło