Có cách nào để làm cho nó để khi các chương trình cố gắng thực hiện các seek()
thao tác trên một đường ống có tên, nó sẽ trở lại thành công (nhưng hành động như thể đường ống là một tập tin trống) thay vì 'Tìm kiếm bất hợp pháp'?
Tôi có một chút đăng nhập cuối cùng trên hệ thống của mình được lưu trữ trong cơ sở dữ liệu SQLite, tôi không có tệp ở bất cứ đâu. Tuy nhiên, có một vài chương trình gặp rắc rối với điều này. Có 2 trường hợp cụ thể;
- Một chương trình muốn ghi vào một tệp nhật ký mà syslog-ng đã tạo như một ống có tên và đang đọc từ đó. Chương trình muốn thực hiện một
seek()
số lý do và sau đó thất bại. - Một chương trình (chẳng hạn như denyhosts hoặc fail2ban) muốn đọc từ tệp nhật ký mà syslog-ng đã tạo như một ống có tên và đang ghi vào. Chương trình muốn thực hiện một
seek()
trên nó và thất bại.
Lý tưởng nhất là tôi muốn những người này tìm cách hành xử như thể cái ống được đặt tên chỉ là một tập tin trống. Tôi không thể thấy bất kỳ lý do tại sao một chương trình viết nhật ký sẽ cần phải thực hiện tìm kiếm bằng mọi cách, nó chỉ nên mở tệp để chắp thêm và bắt đầu viết. Tôi có thể thấy lý do tại sao một chương trình đọc muốn tìm kiếm, để nó có thể tiếp tục từ vị trí cuối cùng của nó, và vì vậy tôi muốn nó hoạt động như thể tập tin trống (giống như nó đã bị cắt ngắn).
Vì vậy, có một số tùy chọn có thể được đặt trên các đường ống được đặt tên để khiến chúng hành xử theo cách này? Nếu không có chế độ có thể được đặt khi syslog-ng mở đường ống để nó hoạt động theo cách này (Tôi đang mở để thực hiện thay đổi mã)? Hay tôi lên một con lạch?