【发布时间】:2017-01-06 05:56:35
【问题描述】:
我想在我的计算机上连续执行一个 C 程序。它实际上不需要“做”任何事情,直到它识别出 event。
例如,可以使用永不退出的do while 循环编写 C 程序。在循环内部,可能有一个if else 条件来侦听event。让我们说“if 一个文件存在于一个目录中,然后打开文件并做一些事情,else 休息一下,sleep(60) 一会儿”。
当然,这个功能可以在 C 程序之外实现。我可以在 shell 脚本中运行上面相同的想法...“if 一个文件存在于一个目录中,然后运行 C 程序,else 休息一下,sleep(60) 一会儿”。如果文件存在,我还可以编写一个 shell 脚本来执行 C 程序,并使用 crontab 或其他调度程序运行 shell 程序。
如果我没有运行sleep 或者我将crontab 设置为非常高的频率,那么显然我的响应时间会提高。虽然这是理想的,但我怀疑这是一种安全且正确的方法。我基本上希望我的程序始终准备好采取行动...event 发生,开始工作!
由于我从未实现过这样的程序,我的问题是,是否有一种适当且安全的方法来创建服务于此类功能的“事件侦听器”? C与shell方法?其他想法?
【问题讨论】:
-
这取决于事件。
man select和man epoll。 -
至于一般看目录,而不是特定文件的存在,另见e.g.
man inotify。可用于检查是否在目录中创建了特定文件。 -
@WilliamPursell 坚持我的问题的上下文,事件将是“文件的存在”。不过,我会检查每一个
-
哦我忘了说inotify是Linux特有的,但其他主要操作系统也有这样的功能。
-
看看如何守护程序,如何在系统启动时启动守护程序,以及如何(异步)侦听您感兴趣的事件。此外,您的问题是范围极广,无法在单一答案的范围内得到合理的回答。