Saya menemukan bahwa jika saya mentransfer sejumlah besar data antara dua proses melalui pipa, beberapa file sementara akan dibuat oleh linux di direktori / tmp. Jika operasi pipa berhasil, file sementara yang sesuai akan dihapus oleh OS secara otomatis. Tetapi jika operasi gagal, file tmp tetap ada.
Untuk beberapa alasan, saya tidak ingin pengguna memiliki kesempatan untuk mendapatkan data yang saya transfer melalui pipa, jadi saya tidak ingin ada yang tertinggal di harddisk walaupun program saya macet. Bagaimana saya bisa melakukan ini?
sender > filename
lalureceiver < filename
. Saya akan memeriksa file tmp selama kedua ops, untuk melihat apakah pengirim atau penerima melakukannya.mkfifo
pipa -created tidak pernah melakukan buffering (sama sekali!) Dan tidak pernah membuat file.Jawaban:
pipa tidak menyimpan data pada disk. / bin / echo foo | grep bar tidak membuat file apa pun. coba
strace -f sh -c '/bin/echo foo | grep bar'
lihat semua panggilan sistem yang dibuat oleh shell saat menjalankan pipa.echo
adalah shell bawaan, jadi saya menyarankan/bin/echo
agar shell menjalankan executable./tmp
tidak harus di disk. Itu dapat dipasang pada tmpfs (yaitu didukung oleh memori virtual). Perhatikan bahwa reboot akan kosong/tmp
dalam kasus itu, jadi gunakan/var/tmp
untuk apa pun yang ingin Anda tinggalkan.Jika yang Anda lakukan adalah memasukkan data ke file, maka itu tidak menggunakan pipa. Jika file tersebut adalah fifo, bukan file biasa, maka itu hanya pertemuan yang dinamai, dan tidak mengandung data. Gunakan ls-l untuk mencari tahu.
Dan perhatikan bahwa jika Anda berharap untuk menghentikan pengguna dari melihat apa yang terjadi melalui pipa dalam proses yang mereka miliki, Anda cukup banyak SOL, karena
strace
dapat memeriksa segala sesuatu yang dilakukan proses yang berinteraksi dengan apa pun di luar proses, kecuali untuk membaca / menulis yang dibagikan bersama Penyimpanan.ltrace
bahkan lebih invasif. Jika program Anda akan berjalan pada sistem di mana pengguna lokal memiliki root, Anda tidak dapat menghentikannya sama sekali. Di Unix, root dapat melakukan apa saja, dan memiliki alat yang kuat untuk tujuan itu.sumber
Pipa sejati adalah blok memori dalam kernel, buffer yang dibaca / ditulis oleh beberapa proses. Itu tidak membuat file di mana saja.
Beberapa aplikasi memiliki opsi yang beralih di antara menggunakan pipa (lebih cepat, tidak ada cakram, membutuhkan sedikit lebih banyak memori) dan menggunakan file temp (mengambil memori sedikit lebih sedikit, memungkinkan Anda untuk melihat file temp, sentuhan lebih lambat).
gcc
adalah salah satu aplikasi tersebut, meskipun mungkin yang lain.sumber
Retasan kotor: Enkripsi data sebelum mengirim dan mendekripsi saat menerima jika Anda dapat mengubah kedua proses ...
sumber