임베디드 C 애플리케이션에서 rtc 드라이버 데이터(dev/rtc0)를 읽는 방법은 무엇입니까?

임베디드 C 애플리케이션에서 rtc 드라이버 데이터(dev/rtc0)를 읽는 방법은 무엇입니까?

기본적으로 내 C 응용 프로그램에서 다음 명령의 출력을 읽으려고 합니다.

timedatectl

그래서 기본적으로 저는 제 애플리케이션을 통해 RTC 시간을 읽고 싶습니다. 그래서 같은 이유로 제 애플리케이션에서 위 명령의 출력을 읽으려고 합니다.

O RTC를 사용하여 시간을 읽는 다른 방법이 있습니까?

/dev/rtc0

어떤 도움이라도 대단히 감사하겠습니다!

답변1

원시 액세스 제어를 원할 경우 파일을 연 후 호출을 사용해야 /dev/rtc0합니다 .ioctl맨페이지),예를 들어

#include <errno.h>
#include <fcntl.h>
#include <linux/rtc.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <time.h>
#include <unistd.h>

int main(int argc, char** argv)
{
    int rtc_fd = open("/dev/rtc0", O_RDONLY);
    if (rtc_fd < 0)
    {
        perror("");
        return EXIT_FAILURE;
    }

    struct rtc_time read_time;

    if (ioctl(rtc_fd, RTC_RD_TIME, &read_time) < 0)
    {
        close(rtc_fd);
        perror("");
        return EXIT_FAILURE;
    }

    close(rtc_fd);

    printf("RTC Time is: %s\n", asctime((struct tm*)&read_time));

    return EXIT_SUCCESS;
}

관련 정보