반응형
시스템 가동 시간을 얻으려면 어떤 API를 호출해야 합니까?
리눅스 기반 시스템에서 실행되는 C 애플리케이션 내에서 시스템 가동 시간을 확보하고 싶습니다.uptime(1)을 호출하고 출력을 구문 분석하고 싶지 않습니다. 기본 C API가 존재하는 것으로 의심되는 C API를 호출합니다.그런 전화가 있는지 아는 사람이 있습니까, 아니면 업타임(1)은 단순히 wtmp에서 얻은 기록을 처리합니까?
찾으시는 시스템 호출은 sysinfo()입니다.
sys/sysinfo.h에 정의되어 있습니다.
서명은 int sysinfo(struct sysinfo *info)입니다.
커널 2.4 이후 이 구조는 다음과 같이 생겼습니다.
struct sysinfo {
long uptime; /* Seconds since boot */
unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
unsigned long totalram; /* Total usable main memory size */
unsigned long freeram; /* Available memory size */
unsigned long sharedram; /* Amount of shared memory */
unsigned long bufferram; /* Memory used by buffers */
unsigned long totalswap; /* Total swap space size */
unsigned long freeswap; /* swap space still available */
unsigned short procs; /* Number of current processes */
unsigned long totalhigh; /* Total high memory size */
unsigned long freehigh; /* Available high memory size */
unsigned int mem_unit; /* Memory unit size in bytes */
char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding for libc5 */
};
재미있게 보내!
이런 거죠.
#include <stdio.h>
#include <errno.h>
#include <linux/unistd.h> /* for _syscallX macros/related stuff */
#include <linux/kernel.h> /* for struct sysinfo */
#include <sys/sysinfo.h>
long get_uptime()
{
struct sysinfo s_info;
int error = sysinfo(&s_info);
if(error != 0)
{
printf("code error = %d\n", error);
}
return s_info.uptime;
}
자세한 내용은 "man sysinfo"를 참조하십시오.
파일 읽기/proc/uptime
첫 번째 소수를 업타임(초)으로 지정합니다.
출처:
/proc/uptime
This file contains two numbers: the uptime of the system (sec‐
onds), and the amount of time spent in idle process (seconds).
clock_get time도 있습니다(아마도 필요할 것입니다).-lrt
). 제가 본 행동(보장된다고 주장하지는 않을 것입니다) 하지만 주어진 행동CLOCK_MONOTONIC
처럼clk_id
시스템 가동 시간을 해당 시간에 반환한다는 것입니다.struct timespec *
매개 변수.
#include <stdio.h>
#include <time.h>
int main(int argc, char* argv[]) {
struct timespec t;
clock_gettime(CLOCK_MONOTONIC, &t);
printf("tv_sec=%llu tv_nsec=%llu\n",
(unsigned long long)t.tv_sec,
(unsigned long long)t.tv_nsec);
return 0;
}
#include <sys/sysinfo.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <grp.h>
int main() {
struct sysinfo sys_info;
struct group* grp;
gid_t gid;
char** users;
int days, hours, mins, x = 1;
system("clear");
printf("\033[4;40m Systems information \033[0;m \n");
if(sysinfo(&sys_info) != 0)
perror("sysinfo");
days = sys_info.uptime / 86400;
hours = (sys_info.uptime / 3600) - (days * 24);
mins = (sys_info.uptime / 60) - (days * 1440) - (hours * 60);
printf("\033[1;33m Uptime: \033[0;36m %ddays, %dhours, %dminutes, %ldseconds \033[0;m \n",
days, hours, mins, sys_info.uptime % 60);
printf("\033[1;33m Load Avgs: \033[0;m 1min(%ld) 5min(%ld) 15min(%ld) \n",
sys_info.loads[0], sys_info.loads[1], sys_info.loads[2]);
printf("\033[1;33m Total Ram: \033[0;m %ldk \t Free: %ldk \n", sys_info.totalram / 1024, sys_info.freeram / 1024);
printf(" \033[1;33m Shared Ram: \033[0;m %ldk ", sys_info.sharedram / 1024);
printf(" Buffered Ram: %ldk \n", sys_info.bufferram / 1024);
printf("\033[1;33m Total Swap: \033[0;m %ldk \t Free swap: %ldk \n", sys_info.totalswap / 1024, sys_info.freeswap / 1024);
printf("\033[1;33m Total High Memory: \033[0;m %ldk Free high memory: %ldk \033[0;m \n", sys_info.totalhigh / 1024, sys_info.freehigh / 1024);
printf(" \n");
printf("\033[1;44m Total Number of processes: %d \033[0;m \n", sys_info.procs);
gid = getgid();
printf(" Group ID: \033[031m %d", gid);
if((grp = getgrgid(gid)) == NULL ) return 1;
printf("\033[0;m Group %s ", grp->gr_name );
printf("\n Users in your group ");
for( users = grp->gr_mem; *users != NULL; users++,++x ); printf( "%d", ++x);
if(strcmp(grp->gr_passwd,"x") == 0) printf(" Password is protected by shadow file. \n");
else printf("Password: %s ", grp->gr_passwd);
return 0;
}
언급URL : https://stackoverflow.com/questions/1540627/what-api-do-i-call-to-get-the-system-uptime
반응형
'programing' 카테고리의 다른 글
MariaDB Active Directory 인증확인 (0) | 2023.09.18 |
---|---|
현재 사용자가 읽기 권한을 가진 테이블 목록을 가져오는 Oracle 쿼리 (0) | 2023.09.18 |
각도 안에 crf_token()을 보내는 방법Laravel API를 이용한 JS 양식? (0) | 2023.09.18 |
MySQL 데이터베이스 이름( 스키마 이름 변경)을 변경하려면 어떻게 해야 합니까? (0) | 2023.09.18 |
워드프레스 플러그인 번역 - load_plugin_text 도메인 (0) | 2023.09.18 |