PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Funktion zum einstellen der Uhrzeit



Mikey
28-01-2003, 21:14
Hi,

ich suche eine Funktion die es mir erlaubt die Hardware Zeit meines (Linux) Systems zu setzen.. settimeofday hat bei mir keinerlei veränderungen gebracht (als root selbstverständlich).
Wäre dankbar wenn mir jemand helfen könnte!

Gruss Mike

anda_skoa
28-01-2003, 21:46
Alle Zeitfunktionen beziehen sich auf die Systemzeit, den die ist die ausschlaggebende.

Du kannst die Hardware Clock mit dem Utiltiy hwclock setzen.

Wenn du dir die man page dazu ansiehst, findest du dort auch einen Abschnitt, wie diser Vorgang von hwclock gelöst wird.

Allerdings ist das wirlich nicht trivial.

Gibt es einen bestimmten Grund, warum du die Hardware Clock setzen willst?

Ciao,
_

Mikey
28-01-2003, 22:11
auf der Kiste hier läuft auch noch andere OS und auf denen sind die Änderungen ja dann nicht effektiv? aber das ließe sich ja auch durch anschliessenden Aufruf von hwclock lösen.. Welche Funktion gibt es denn?
Hintergrund der Geschichte ist, dass ich auf meiner dbox mit Linux die sich die Zeit vom SAT holt einen kleinen Zeitserver laufen lassen will und mein LAN sich dann von der dbox die Zeit holen soll..

Gruss Mike

anda_skoa
29-01-2003, 06:30
Original geschrieben von Mikey
auf der Kiste hier läuft auch noch andere OS und auf denen sind die Änderungen ja dann nicht effektiv?


Hmm, bei mir wird beim Runterfahren oder einem Reboot die Systemzeit automatisch in die HW Clock übertragen.



aber das ließe sich ja auch durch anschliessenden Aufruf von hwclock lösen.. Welche Funktion gibt es denn?


Ich bin mir jetzt nicht sicher, wie du das meinst, aber mit hwclock geht das so
#> hwclock --systohc



Hintergrund der Geschichte ist, dass ich auf meiner dbox mit Linux die sich die Zeit vom SAT holt einen kleinen Zeitserver laufen lassen will und mein LAN sich dann von der dbox die Zeit holen soll..


Hmm, solange das System unter Linux läuft, braucht es nur die Systemzeit.

Ciao,
_

Mikey
29-01-2003, 07:27
äh ja das mit dem hwclock hast du schon richtig verstanden aber das "Welche Funktion gibt es denn" bezog sich auf eine C Funktion zum setzen der Systemzeit..Wie gesagt settimeofday mag bei mir irgendwie nichts ändern trotz scheinbar erfolgreichem Aufruf und mehr hab ich bei durchforsten meines man Verzeichnisses nicht gefunden..

Gruss Mike

Jasper
29-01-2003, 15:33
Original geschrieben von Mikey
äh ja das mit dem hwclock hast du schon richtig verstanden aber das "Welche Funktion gibt es denn" bezog sich auf eine C Funktion zum setzen der Systemzeit..Wie gesagt settimeofday mag bei mir irgendwie nichts ändern trotz scheinbar erfolgreichem Aufruf und mehr hab ich bei durchforsten meines man Verzeichnisses nicht gefunden..


es gibt auch keine spezielle clib-funktion zum setzen der rtc. das musst du schon per hand machen, also open('/dev/rtc') und dann per ioctl() calls die rtc entsprechend programmieren. das sieht dann ungefähr so aus (untested):

struct rtc_time rtc_zeit;
int fd;

fd = open("/dev/rtc", O_RDONLY);

// hier rtc_zeit mit werten füllen

if( ioctl(fd, RTC_SET_TIME, &rtc_zeit) == -1 ) {
fprintf(stderr, "rtc nicht geschrieben.\n");
}

-j

pik7
29-01-2003, 16:55
hallo,

das setzt bei mir die systemzeit
mit settimeofday:

#include <time.h>
#include <sys/time.h>

int main() {

int stunde=17;
int minute=48;
int sec=45;

time_t allsec;
struct tm *zeit;
struct timeval neu;

allsec=time(NULL);

zeit=localtime(&allsec);

zeit->tm_sec=sec;
zeit->tm_min=minute;
zeit->tm_hour=stunde;

allsec=mktime(zeit);

timerclear(&neu);

neu.tv_sec=allsec;

settimeofday(&neu,0);

}


gruß

Jasper
30-01-2003, 12:28
Original geschrieben von pik7
hallo,

das setzt bei mir die systemzeit
mit settimeofday:

#include <time.h>
#include <sys/time.h>

int main() {

int stunde=17;
int minute=48;
int sec=45;

time_t allsec;
struct tm *zeit;
struct timeval neu;

allsec=time(NULL);

zeit=localtime(&allsec);

zeit->tm_sec=sec;
zeit->tm_min=minute;
zeit->tm_hour=stunde;

allsec=mktime(zeit);

timerclear(&neu);

neu.tv_sec=allsec;

settimeofday(&neu,0);

}


der OP möchte aber die zeit der CMOS-uhr (hardware-zeit) setzen.
geht das damit auch?

-j

anda_skoa
30-01-2003, 15:16
Original geschrieben von Jasper
der OP möchte aber die zeit der CMOS-uhr (hardware-zeit) setzen.
geht das damit auch?


pik7 hat auf das letzte Posting von Mikey geantwortet, wo er drafu hinweist, dass er eine Funktuiom zum Setzen der Systemzeit sucht, weil esmit settimeofday nicht gegangen ist.

pik7 hat ihm ein Beispiel gepostet, wie es bei ihm funktioniert.

@pik7: bitte code tags verwenden, zumindest bei so langem Code :)
Du kannst dein Posting jetzt auch noch damit ausstatten

Ciao,
_

Mikey
30-01-2003, 18:31
hey danke es funktioniert :)) Hab erst die systemzeit via Netzwerk und settimeofday aktualisiert und danach mit execvp hwclock aufgerufen um die hardware uhr auch zu setzen und lüppt echt traumhaft:) :)
Also nochmal vielen Dank für eure Hilfe!

Gruss Mike