Я никогда не программировался на C, и поэтому очень сложно написать небольшую часть программного обеспечения, которая возвращает разницу между двумя датами в секундах.Разница в датах в C (в секундах)
Как и в качестве справочной информации, я реализовал своего рода сердечный ритм в приложении Python с обновлением txt-файла каждые 15 секунд. Теперь я хотел бы создать приложение C, которое проверяет этот txt постоянно, и в случае, если разница превышает 30 секунд, он перезагружает мой компьютер.
Вот как далеко я зашел так далеко:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/types.h>
//Returns the number seconds since the last time the files has been updated
int lastUpdate() {
struct stat attr;
stat("watcher.txt", &attr);
//Gets the last update in the following format: Mon Aug 13 08:23:14 2012
//ctime(&attr.st_mtime);
time_t lastChange = &attr.st_mtime
time_t now = time(0)
//No idea how to implement it :-(
//int seconds = timediff(now, lastChange)
return seconds;
}
//Constantly checks if application is sending heart beats in a 30 seconds time frame
main()
{
while(1 == 1)
{
if(lastUpdate() > 30)
{
sprintf(cmd, "sudo reboot -i -p");
system(cmd);
}
}
}
ли кто-нибудь будет так приятно и дать несколько советов о том, как получить эту работу? Большое спасибо!
Редакцией: Окончательный код работает без проблем:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/types.h>
//Returns the number seconds since the last time the files has been updated
int lastUpdate() {
struct stat attr;
stat("/home/pi/watcher.txt", &attr);
time_t lastChange = attr.st_mtime;
time_t now = time(0);
int seconds = now - lastChange;
return seconds;
}
//Constantly checks if application is sending heart beats in a 30 seconds time frame
main()
{
sleep(120);
while(1 == 1)
{
sleep(1);
if(lastUpdate() > 30)
{
system("sudo reboot -i -p");
}
}
}
Вы можете добавить 'сон (1)' в цикле, чтобы избежать коробления процессора. – stark
Помните, что настройки времени (например, DST) могут привести к непредвиденной перезагрузке компьютера. – moooeeeep
Добавляя к точке moooeeeep - вместо того, чтобы смотреть на дату и время, вы должны использовать монотонный таймер. Большинство языков (и I imaginge Python является одним из них) имеют функцию, которая возвращает миллисекунды с момента загрузки. Вы можете использовать это, чтобы определить, сколько времени прошло между двумя событиями, и на это не влияет время установки вашего компьютера. Он перекачивает все так часто, потому что он находится в 32-битном int, но вычесть, чтобы найти прошедшее время, по-прежнему безопасно. – Katie