Unter Linux ist diese Art von Daten Zugriff über die getutent
API-Aufrufe. Sie können utmpname
verwenden, um den Dateinamen festzulegen, und getutent
verwenden, um jeden Eintrag in dem Login-Verlauf abzurufen.
Einzelheiten der API Kasse http://linux.die.net/man/3/getutent
Das Format der Datei auf http://linux.die.net/man/5/utmp
EDIT
Denn wie speziell die Abschaltzeit erhalten beschrieben wird, überprüfen Sie die ut_user
der struct utmp
zurück durch die API, und machen Sie etwas, wenn es shutdown
ist, zum Beispiel durchlaufen Sie alle Einträge in der Datei mit diesem Code:
struct utmp *u = getutent();
if (strncmp(u>ut_user, "shutdown", 8) == 0) {
// parse the shutdown time in u->ut_time
}
folgenden Code erfolgreich alle Shutdown-Einträge auf meinem System identifiziert:
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <utmp.h>
int main(void)
{
struct utmp *u;
int ret;
ret = utmpname("/var/log/wtmp");
if (ret < 0) {
perror("utmpname");
return 1;
}
while (true) {
u = getutent();
if (!u) {
perror("getutent");
break;
}
if (strncmp(u->ut_user, "shutdown", 8) == 0) {
time_t t = u->ut_time;
struct tm *tm = localtime(&t);
char timestr[128];
strftime(timestr, sizeof timestr, "%a %b %d %T %Y", tm);
printf("%s: %s\n", u->ut_user, timestr);
}
}
return 0;
}
Ausgang auf meinem System:
shutdown: Tue Mar 08 00:13:00 2016
shutdown: Sat Mar 12 08:45:57 2016
shutdown: Sat Mar 19 09:55:49 2016
shutdown: Wed Mar 23 16:24:39 2016
....
Was Verteilung und die Versionsnummer werden Sie mit (Ubuntu 14.04, CentOS 7, usw. .) Verschiedene Init-Systeme können verschiedene Informationen zu wtmp schreiben. –