Мне нужен совет и помощь с плагином, который я пишу для Nagios.
Я пишу плагин на C, но не имею опыта работы с языком, за исключением небольших сумм, пока пытаюсь заставить этот плагин работать.
В основном я пытаюсь сделать следующее:
читать текстовый файл, который генерируется на удаленном ПК приложением, которое я написал, эта программа записывает в файл не более 5 символов, первые 4 символа - это время в 24-часовом формате. например 22:30> 10:30 вечера
Затем нужно взять эти 4 символа, преобразовать их во время и сравнить с текущим системным временем (если разница составляет 5 минут, генерируется ответ nagios для пометки предупреждения).
Я пробовал много разных способов сделать это, моя первая попытка состояла в том, чтобы преобразовать символы в целое число, затем преобразовать время в целое число и сравнить разницу ... не удалось этого сделать.
Моя вторая попытка - сгенерировать две Структуры Времени, одну с текущим временем, а другую с моим "самодельным" временем и сравнить их, но это тоже не работает.
Вот мой код, независимо от того, что я пробую, дата из файла всегда совпадает с текущим системным временем, я знаю, что это связано с необходимостью установить время сверху.
t_of_file = time(NULL);
time_from_file = localtime(&t_of_file);
но если я не сделаю этого, я получу ошибку сегментации.
вот код.
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define COPYMODE 0644
int main(int argc, char *argv[])
{
struct tm *time_from_file;
struct tm *the_system_time;
time_t t_of_file;
time_t t_of_sys;
t_of_sys = time(NULL);
the_system_time = localtime(&t_of_sys);
t_of_file = time(NULL);
time_from_file = localtime(&t_of_file);
time_from_file->tm_year = the_system_time->tm_year;
time_from_file->tm_mon = the_system_time->tm_mon;
time_from_file->tm_mday = the_system_time->tm_mday;
time_from_file->tm_hour = 10; //should be read in from file
time_from_file->tm_min = 30; //should be read in from file
time_from_file->tm_sec = the_system_time->tm_sec;
time_from_file->tm_isdst = the_system_time->tm_isdst;
t_of_file = mktime(time_from_file);
printf("%s\n",ctime(&t_of_file));
t_of_sys = mktime(the_system_time);
printf("%s\n",ctime(&t_of_sys));
double difference = difftime(t_of_file, t_of_sys );
printf("%lf\n",(double)t_of_file);
printf("%lf\n",(double)t_of_sys);
if (difference >= 0.0) { //this should be 5 mins, not quite sure what to put here yet
// second is later than first
printf("later\n");
}
else if (difference < 0.0) {
// second is earlier than first
printf("earlier\n");
}
printf("%lf\n", difference);
return 0;//STATE_OK;
}
любая помощь, которую вы можете предложить, будет признательна за это.
Следуя ответам, которые я получил, ответ PACE был точным для того, что я хотел сделать, и теперь у меня есть более простой код, который отлично работает для того, что я пытаюсь сделать, и легче чтобы понять. ниже приведен код в его измененном виде (он прекрасно компилируется в Linux).
#include <stdio.h>
#include <time.h>
int main ()
{
time_t filetime;
time_t presenttime;
struct tm * timeinfo;
time ( &filetime );
time ( &presenttime);
timeinfo = localtime ( &filetime );
timeinfo->tm_hour = 14; //this should be entered from file
timeinfo->tm_min = 15; //this should be entered from file
filetime = mktime ( timeinfo );
printf("my time %s\n",ctime(&filetime));
printf("pc time %s\n",ctime(&presenttime));
double difference = difftime(filetime, presenttime );
printf("%lf\n",(double)filetime);
printf("%lf\n",(double)presenttime);
if (difference > 300.0) {
// second is later than first
printf("later\n");
}
else if (difference < 0.0) {
// second is earlier than first
printf("earlier\n");
}
printf("%lf\n", difference);
return 0;
поболеть за помощь, ребята.