Informiert den Kern ueber die lokale Zeitzone und ob die
Echtzeituhr auf UTC laeuft (Aufruf mit "-u" ).
Siehe /usr/src/linux/kernel/time.c
Funktion sys_settimeofday (in Linux 1.0 Zeile 239)

Bei Fragen mail an duwe@immd4.informatik.uni-erlangen.de


[Original Announce von Torsten]
Subject: kern_tzset
Status: RO

Hier der source fuer's programm, das das leidige /etc/clock -s ersetzt:
----------8<---------------kern_tzset.c---------------8<---------------
#include <stdio.h>
#include <sys/time.h>

int main(int argc, char ** argv, char ** envp)
{
  struct timezone	tz = {0, 0};
  time_t now;
  int offset, dst;

  if (argc != 1 && (argc != 2 || strcmp(argv[1], "-u")))
    {
      fprintf(stderr, "usage:\n%s [-u]\n", argv[0]);
      exit(-1);
    }

  if (argc == 2)
    if (settimeofday(NULL, &tz))
      perror("settimeofday(NULL, &0)");

  now = time(&now);

  /* offset should be positive (-> +24) */
  offset = gmtime(&now)->tm_hour - localtime(&now)->tm_hour + 24;

  dst = (offset*3600 - timezone) % 86400; /* 86k4 secs per day */
  if (dst == 82800) dst = -3600;
  else if (dst != 0)
    {
      fprintf(stderr, "Weird dst value: %d seconds !\n", dst);
      exit(1);
    }

  /* printf("offs = %d, timezone = %ld, dst = %d\n", offset, timezone, dst); */

  tz.tz_minuteswest = (timezone+dst) / 60;
  if (settimeofday(NULL, &tz))
    perror("settimeofday(NULL, tz)");
  return(0);
}
----------8<---------------kern_tzset.c---------------8<---------------
Fuer nicht Eingeweihte: der Kern liest beim Booten die RTC etwa
millisekundengenau aus, nur die Zeitzone kennt er nicht und lauert deshalb
auf den ersten settimeofday() mit gesetzter TZ, um die Stunden zu
korrigieren. Dieses Prograemmchen teilt sie ihm mit; /sbin/clock dagegen macht
mit seiner pfuschigen User-Level-I/O mehr kaputt als heil und sollte deshalb
nur zum Stunden-setzen der RTC und zu evtl. Debug-Zwecken verwendet werden.
	The code is obvious: /usr/lib/zoneinfo/localtime richtig linken und
im /etc/rc.d/rc.local einfach "/sbin/kern_tzset -u" bei "richtiger" 
Unix-Zeit (UTC) bzw. ohne "-u" fuer losige localtime aufrufen.

	Torsten

