根据当前时间运行func()

根据当前时间运行func(),c,timer,C,Timer,我编写了一些代码,用inotify()监视目录DIR,当文件在DIR中移动时,我会得到该文件的.txt输出(它是一个带有网络接口流的nfcapd文件)。这种情况每5分钟发生一次 之后,我使用了Snort的DPX初学者工具包,通过编写自己的预处理器,可以扩展Snort。与其他所有预处理器一样,这个预处理器只是一个函数,每次新数据包可用时都会执行它。我的问题是,当从以前的代码中导出一个新文件时(因此每5分钟一次),我希望在预处理器的函数中读取该文件 那么,是否有任何方法可以获得时间并仅在所需时间内执

我编写了一些代码,用inotify()监视目录DIR,当文件在DIR中移动时,我会得到该文件的.txt输出(它是一个带有网络接口流的nfcapd文件)。这种情况每5分钟发生一次

之后,我使用了Snort的DPX初学者工具包,通过编写自己的预处理器,可以扩展Snort。与其他所有预处理器一样,这个预处理器只是一个函数,每次新数据包可用时都会执行它。我的问题是,当从以前的代码中导出一个新文件时(因此每5分钟一次),我希望在预处理器的函数中读取该文件

那么,是否有任何方法可以获得时间并仅在所需时间内执行

if (time is 15:36){
    func(output.txt);}
我在用c写


谢谢

您可以执行以下操作:

#include <time.h>
...

time_t t = time(NULL); //obtain current time in seconds
struct tm broken_time;
localtime_r(&t, &broken_time); // split time into fields

if(broken_time.tm_hour == 15 && broken_time.tm_min == 36) { //perform the check
    func(output.txt);
}
#包括
...
时间t=时间(空)//以秒为单位获取当前时间
struct-tm-ru时间;
本地时间(r&t,&U时间);//将时间分割为字段
如果(breaked_time.tm_hour==15和&breaked_time.tm_min==36){//执行检查
func(output.txt);
}

因为您使用的是
inotify
,所以我假设您的环境支持POSIX信号

您可以使用在经过预定的时间后发出信号,并让服务器执行您需要执行的任何工作。这将避免我认为最终会成为代码中非常丑陋的无限循环

因此,在您的例子中,函数handling
SIGALRM
不需要担心它是什么时间,它会知道输入它已经经过了预定的时间量。然而,您需要提供一些函数可以访问的上下文,以便知道该做什么,在不查看代码的情况下很难建议如何做


我不完全确定您的做法是否正确,但根据您的描述,使用
alarm()
可能是最明智的方法。

您可以这样做,但它闻起来像是糟糕的设计。你能提供更多关于你正在做什么的细节吗?为什么你不能基于
inotify
?它们是独立的源文件。“monitor_nfcapd”(第一个)在Snort之外,必须保持这样。另外,我不能使用inotify,因为预处理器函数执行1000次/s(对于每个数据包)。所以,每次预处理器运行时,我只能检查时间、标志或类似的东西executes@cnicutar我是编程新手,所以是的,这的确是个糟糕的设计!!:我想我只是需要一些像gettimeofday()的东西,但是谢谢,我两个都试试!不用担心,听起来像是一个有趣的项目:)如果你最终做了一些完全不同的事情,也不要犹豫提供你自己的答案。