You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C程序中实现WSL2时钟与Windows主机同步,无需sudo密码

解决WSL2中C程序时钟同步无需密码的方案

方案1:授权特定用户免密执行hwclock -s

这是最安全且直接的方式,仅给你的WSL账号开放执行时钟同步命令的免密权限:

  • 打开终端,运行sudo visudo编辑sudoers配置文件
  • 在文件末尾添加一行(替换成你的实际WSL用户名):
    your_username ALL=(ALL) NOPASSWD: /sbin/hwclock -s
    
  • 保存退出(visudo中按Ctrl+O确认保存,回车后按Ctrl+X退出)

配置完成后,C程序里直接调用system("sudo hwclock -s");即可无密码同步时钟,且仅授权了单一特定命令,避免过度开放权限。

方案2:读取Windows主机时间同步(需配合免密date命令)

如果不想依赖hwclock,可以直接读取Windows系统时间来同步WSL时钟:
编写C函数实现时间读取与同步:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void sync_wsl_clock() {
    FILE *fp = popen("wmic os get localdatetime /value", "r");
    if (!fp) {
        perror("Failed to get Windows time");
        return;
    }

    char buf[128];
    char raw_time[15];
    while (fgets(buf, sizeof(buf), fp)) {
        if (sscanf(buf, "LocalDateTime=%14s", raw_time) == 1) {
            // 转换为date命令可识别的格式
            char formatted_time[20];
            snprintf(formatted_time, sizeof(formatted_time),
                     "%.*s-%.*s-%.*s %.*s:%.*s:%.*s",
                     4, raw_time, 2, raw_time+4, 2, raw_time+6,
                     2, raw_time+8, 2, raw_time+10, 2, raw_time+12);
            // 调用date命令设置时间
            char cmd[128];
            snprintf(cmd, sizeof(cmd), "sudo date -s \"%s\"", formatted_time);
            system(cmd);
            break;
        }
    }
    pclose(fp);
}

int main() {
    sync_wsl_clock();
    time_t now = time(NULL);
    printf("Current time: %s", ctime(&now));
    return 0;
}

之后同样需要通过sudo visudo给用户授权免密执行date -s命令:

your_username ALL=(ALL) NOPASSWD: /bin/date -s *

方案3:开启WSL2自动时钟同步(推荐)

新版本WSL2已支持休眠恢复后自动同步时钟,无需手动编写代码:

  • 运行wsl --version检查版本,若低于0.67.6,执行wsl --update升级
  • 在Windows用户目录下创建/编辑.wslconfig文件,添加以下配置:
    [wsl2]
    clockSync=true
    
  • 重启WSL(wsl --shutdown后重新打开终端),此后休眠恢复时WSL会自动同步时钟,无需在C程序中额外处理。

内容的提问来源于stack exchange,提问作者Dabbo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:08:19