gpt4 book ai didi

c - 如何在 C 程序中以秒为单位打印 CMOS 时间?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:40 26 4
gpt4 key购买 nike

我写了一个小程序,实际上是从linux源代码中提取出来的。请找到我的示例代码。

#include <stdio.h>

#define CMOS_READ(addr) ({ \
outb_p(0x80|addr,0x70); \
inb_p(0x71); \
})

#define outb_p(value,port) \
__asm__ ("outb %%al,%%dx\n" \
"\tjmp 1f\n" \
"1:\tjmp 1f\n" \
"1:"::"a" (value),"d" (port))

#define inb_p(port) ({ \
unsigned char _v; \
__asm__ volatile ("inb %%dx,%%al\n" \
"\tjmp 1f\n" \
"1:\tjmp 1f\n" \
"1:":"=a" (_v):"d" (port)); \
_v; \
})

#define outb(value,port) \
__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port))


#define inb(port) ({ \
unsigned char _v; \
__asm__ volatile ("inb %%dx,%%al":"=a" (_v):"d" (port)); \
_v; \
})

int main(void)
{
int val = 0;
val = CMOS_READ(0);
printf("val = %d", val);
return 0;
}

编译正常,但在执行时出现段错误。
有人可以指导我吗?

最佳答案

您无权访问 CMOS I/O 端口。您需要使用 CAP_SYS_RAWIO 运行(通常以 root 用户身份运行,尽管您也可以使用文件功能),然后调用 ioperm(2)请求访问 CMOS I/O 端口。

此外,<sys/io.h>定义 I/O 访问宏,因此您无需自己定义它们。

关于c - 如何在 C 程序中以秒为单位打印 CMOS 时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6407371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com