Linux でハードウェア クロックをプログラムで設定するにはどうすればよいですか?

詳細については rtc の man ページを参照してください。ただし、root としてログインしている場合は、次のようになります:

#include <linux/rtc.h>
#include <sys/ioctl.h>


    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 */
    };

int fd;
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) のマニュアル ページを参照してください。


また、ハードウェア クロックはある程度の精度しかないことも指摘したいと思います (1 日に数秒ずつ遅れたり増えたりするシステムを見てきました)。

ネットワーク タイム デーモンをセットアップして、クロックをタイム サーバーと同期させることを検討しましたか?

確かに、この同期はデーモンが起動するまで行われないため、ハードウェア クロックを同期しておくことは、電源投入時とタイム デーモンがタイム サーバーと同期する時点との間でも役立ちます。