Apakah ada cara untuk membuatnya sehingga ketika program mencoba untuk melakukan seek()
operasi pada pipa bernama itu akan kembali berhasil (tetapi bertindak seolah-olah pipa itu adalah file kosong) alih-alih 'Pencarian ilegal'?
Saya memiliki setiap log terakhir pada sistem saya yang tersimpan dalam database SQLite, saya tidak punya file di mana pun. Namun ada beberapa program yang mengalami masalah dengan ini. Ada 2 kasus khusus;
- Suatu program ingin menulis ke file log yang syslog-ng telah buat sebagai pipa bernama dan sedang dibaca. Program ingin melakukan
seek()
karena suatu alasan dan kemudian gagal. - Suatu program (seperti denyhosts atau fail2ban) ingin membaca dari file log yang syslog-ng telah buat sebagai pipa bernama dan sedang menulis. Program ingin melakukan
seek()
itu dan gagal.
Idealnya saya hanya ingin ini berperilaku seolah-olah pipa bernama hanyalah file kosong. Saya tidak dapat melihat alasan mengapa suatu program menulis log perlu melakukan pencarian, itu hanya harus membuka file untuk ditambahkan dan mulai menulis. Saya dapat melihat mengapa program membaca ingin mencari, sehingga dapat melanjutkan dari posisi terakhir, dan jadi saya ingin berperilaku seolah-olah file itu kosong (seperti telah terpotong).
Jadi, apakah ada beberapa opsi yang dapat ditetapkan pada pipa bernama untuk membuat mereka berperilaku seperti ini? Jika tidak apakah ada mode yang dapat diatur ketika syslog-ng membuka pipa agar berperilaku seperti ini (saya terbuka untuk membuat perubahan kode)? Atau aku anak sungai?
F
perintah dalam kurang, itu akan cukup untuk kurang menyegarkan layar jika tidak mendapatkan output apa pun untuk satu atau dua detik. Membuat pipa dapat dicari tidak akan membantu: perbedaan yang relevan adaF
pada akhir file, kemudian menunggu data muncul melewati akhir - tetapi untuk pipa, ujung file hanya datang ketika penulis menutup file.Jika aplikasi itu memanggil mencari, maka itu baik rusak, atau tidak dimaksudkan untuk bekerja pada pipa. Jika yang pertama, maka itu perlu diperbaiki. Jika yang terakhir, maka ia mengharapkan upaya untuk benar-benar bekerja, jadi berbohong dan mengklaim itu berhasil ketika hampir tidak akan menyebabkan operasi yang salah.
Juga jika file log diganti dengan pipa bernama, maka hanya satu proses yang bisa membacanya dari satu waktu. Seharusnya soket.
sumber