Linuxでハードウェアクロックをプログラムでどのように設定しますか?
質問
Linuxは、システム時間を設定するstime(2)呼び出しを提供します。ただし、これによりシステムの時刻が更新されますが、BIOSハードウェアクロックは新しいシステム時刻に一致するようには設定されません。
Linuxシステムは通常、ハードウェアクロックをシャットダウン時および定期的な間隔でシステム時間と同期します。ただし、これらの自動同期のいずれかの前にマシンの電源を入れ直した場合、マシンの再起動時に時間が不正確になります。
システム時刻を設定するときにハードウェアクロックが更新されるようにするにはどうすればよいですか
解決
詳細についてはrtcのマンページをご覧ください。ただし、rootとしてログインしている場合は、次のようになります。
struct rtc_time {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday; /* unused */
int tm_yday; /* unused */
int tm_isdst;/* unused */
};
struct rtc_time rt;
/* set your values here */
fd = open("/dev/rtc", O_RDONLY);
ioctl(fd, RTC_SET_TIME, &rt);
close(fd);
他のヒント
stime()を呼び出した後、これを行います:
system("/sbin/hwclock --systohc");
詳細については、hwclock(8)のマニュアルページを参照してください。
hwclockのソースコードを読むことから始めます。
また、ハードウェアクロックが特定のポイントにのみ正確であることを指摘したいと思います(1日に数秒のゆるみ/増加するシステムを見てきました)。
タイムサーバーに対してクロックを同期するために、ネットワークタイムデーモンを設定することを検討しましたか?
確かに、この同期はデーモンが起動するまで行われないため、ハードウェアクロックを同期させることは、電源投入からタイムデーモンがタイムサーバーと同期するまでの間に役立ちます。
テキストエディターがkubuntuと異なる場合(kateはエディターのデフォルトです)、ターミナルの sudo
コマンドで独自のものを使用します。
- ターミナルを実行
- このコマンドをコピーして貼り付けます
sudo kate / etc / default / rcS
を押す Enter - ユーザーパスワード(ログインパスワード)を入力し、 Enter を押します。
- デスクトップでテキストエディターが開きます
- 行
UTC = yes
をUTC = no
に変更します - (テキストエディタのタブバーの上部にある)保存をクリックします
- 再起動
所属していません StackOverflow