2016-08-30 11 views
5

Tôi muốn tiếp tục thực hiện chương trình C trên máy tính của mình. Nó không thực sự phải "làm" bất cứ điều gì cho đến khi nó xác định một event mặc dù.Có cách nào thích hợp để viết chương trình chạy liên tục

Ví dụ: chương trình C có thể được viết bằng vòng lặp do while không bao giờ thoát. Bên trong vòng lặp, có thể có một điều kiện if else lắng nghe một số event. Cho phép nói "if một tệp tồn tại trong một thư mục, sau đó mở tệp và làm điều gì đó, else nghỉ giải lao và sleep(60) trong một phút".

Tất nhiên, chức năng này có thể được triển khai bên ngoài chương trình C. Tôi có thể chạy cùng một ý tưởng ở trên trong tập lệnh shell ... "if một tệp tồn tại trong một thư mục, sau đó chạy chương trình C, else nghỉ ngơi và sleep(60) trong một phút". Tôi cũng có thể viết một kịch bản lệnh shell để thực hiện chương trình C nếu một tệp tồn tại và chạy chương trình shell với một crontab hoặc một số trình lập lịch biểu khác.

Nếu tôi không chạy sleep hoặc tôi đặt crontab thành tần suất rất cao, thì rõ ràng thời gian phản hồi của tôi sẽ cải thiện. Trong khi đó sẽ là lý tưởng, tôi có nghi ngờ của tôi đó là một cách an toàn và thích hợp để làm điều này. Tôi về cơ bản muốn chương trình của tôi luôn sẵn sàng hành động ... một số event xảy ra, hãy làm việc!

Vì tôi chưa bao giờ triển khai một chương trình như vậy, câu hỏi của tôi là, có cách thích hợp và an toàn để tạo một "người nghe sự kiện" phục vụ loại chức năng này không? Cách tiếp cận C vs shell? Những ý tưởng khác?

+2

Tùy thuộc vào sự kiện. 'man select', và' man epoll'. –

+4

Như để xem một thư mục nói chung, và không cho sự tồn tại của một tập tin cụ thể, cũng xem ví dụ ['man inotify'] (http://man7.org/linux/man-pages/man7/inotify.7.html). Có thể được sử dụng để kiểm tra xem một tập tin cụ thể được tạo ra trong thư mục mặc dù. –

+0

@WilliamPursell Gắn bó với bối cảnh câu hỏi của tôi, sự kiện sẽ là "sự tồn tại của một tệp". Tôi sẽ kiểm tra từng cái trong số đó mặc dù – ThatsRightJack

Trả lời

1

Điều bạn thực sự muốn là liên lạc giữa quy trình. sử dụng 'sleep()' và kiểm tra điều kiện có thể được thực hiện nhưng đây không phải là cách tối ưu về mức tiêu thụ CPU.

Có vì có một số cách để giao tiếp giữa các quá trình, tôi biết những:

  1. ống
  2. bộ nhớ chia sẻ
  3. ổ cắm
  4. Fifo

nó là tốt để bắt đầu ống : điều này có thể được sử dụng khi bạn có 2 chương trình và bạn muốn chương trình # 1 đợi một số sự kiện từ chương trình # 2. Tôi tìm thấy một ví dụ here nhưng có nhiều người khác trong google.

sau đó tôi sẽ tiếp tục với ổ cắm. một ví dụ là here nhưng một lần nữa, có nhiều thứ khác trong web.

để đọc thêm Tôi có thể tư vấn cho bạn tìm cuốn sách "Lập trình Linux nâng cao" trong chương "Giao tiếp Interprocess".

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