2009-07-03 29 views
5

Tôi hiện đang xem tệp XML từ đầu ra log4j. Tôi có một trình xem tùy chỉnh hiển thị log-output trong GUI. Tôi cần xem tập tin này khi nó được cập nhật để GUI có thể phân tích lại và tự cập nhật. Trong C# có một khái niệm FileWatcher như vậy trên Windows không-probs, nhưng những tùy chọn nào tôi có sử dụng C trên Linux.Linux: Làm cách nào để tìm hiểu xem tệp đã được cập nhật bởi một quy trình khác chưa?

Có cách nào tiêu chuẩn để làm điều này trên cả hai hương vị unix và linux (POSIX có thể)?

Cảm ơn

Trả lời

6

John đã đề cập đến hai tuyến đường chính bạn có thể thực hiện để xem tệp trong hệ thống Unix/Linux: thông báo và bỏ phiếu.

Thông báo là khi bản thân hệ thống (thường là hạt nhân) kích hoạt thông báo cho các ứng dụng đã đăng ký bất cứ khi nào tệp được truy cập hoặc ghi vào. Cách tiếp cận này đòi hỏi một hệ thống tuân thủ và có thể không có sẵn trên các máy cũ hơn.

Việc triển khai chính thông báo dưới Linux là inotify, được xây dựng thành hạt nhân 2.6.13 trở lên và có thể được vá thành 2.6.12 trở về trước. Có một số nice IBM guide khi sử dụng inotify cũng như số set of tools and C library cơ bản để truy cập vào thông báo.

Thăm dò ý kiến ​​ là khi chương trình của bạn liên tục kiểm tra tệp trong các khoảng thời gian để xem liệu có bất kỳ điều gì về tệp đó không - kích thước, thời gian sửa đổi cuối cùng, chủ sở hữu, v.v.

Không có tiêu chuẩn thực hiện điều này, vì nó được viết trên cơ sở cấp chương trình chứ không phải hệ thống, mặc dù hệ thống gọi poll tồn tại và dường như làm điều gì đó hữu ích cho mục đích này (trang người đàn ông nói nó tương tự như select và nó chờ một sự kiện có sẵn trên bộ mô tả tệp). Bạn cũng có thể sử dụng cách tiếp cận cơ bản hơn với stat và tự mình thực hiện kiểm tra.

+0

cảm ơn lời giải thích –

+0

Tôi nghi ngờ rằng cuộc thăm dò ý kiến ​​() sẽ giúp ích. Có vẻ như bạn đã hiểu nhầm cuộc thăm dò ý kiến ​​() nào. Trừ khi bạn có ý định sử dụng nó * với * inotify. – Thomas

+0

Để làm rõ: poll() chỉ có thể cho bạn biết nội dung như "nếu tôi đọc() từ tệp này ngay bây giờ, liệu nó có chặn không?" hoặc "Đợi tối đa 3 giây hoặc cho đến khi tôi có thể đọc (mà không cần đọc() chặn) từ ít nhất một trong các bộ mô tả tệp". – Thomas

6

Bạn đang tìm kiếm thứ gì đó như inotify?

Hoặc bạn có thể thăm dò ý kiến ​​tệp bằng cách sử dụng stat.

+0

Điều đó đáp ứng nhu cầu của tôi một cách hoàn hảo, nhưng tôi nghĩ tôi sẽ phải phát minh lại bánh xe và mã hóa nó bằng cách sử dụng API C chuẩn. Vì vậy, có bất kỳ cơ hội mà tôi có thể làm điều đó bằng cách sử dụng đơn giản fstat và các API stat? –

+0

Bạn có thể muốn làm rõ rằng ... Nếu inotify âm thanh như những gì bạn cần, và bạn đang trên Linux, tại sao bạn không thể sử dụng nó? – unwind

0

Nếu bạn muốn một thứ gì đó cầm tay hơn so với inotify, đó là Linux-ism, hãy nhìn vào File Alteration Monitor, công nghệ cũ hơn và di động hơn, nhưng có thể ít hoạt động hơn. Mặt khác, nó làm một cái gì đó hữu ích với các hệ thống tập tin được gắn NFS, tùy thuộc vào ứng dụng của bạn có thể là quan trọng.

+0

cảm ơn đề nghị, đặc biệt vì nó là hạt nhân bất khả tri và có thể làm việc với các hệ thống được gắn NFS. –

Các vấn đề liên quan