studio reales proyectos para libro introducción incluye herramientas fuente español desarrollo código con avanzado aplicaciones c linux uptime

reales - ¿A qué API llamo para obtener el tiempo de actividad del sistema?



libro de android studio en español pdf (5)

Eso sería algo como esto.

#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; }

Consulte "man sysinfo" para obtener más información.

Me gustaría obtener el tiempo de actividad del sistema desde una aplicación C que se ejecuta en un sistema basado en Linux. No quiero llamar al tiempo de actividad (1) y analizar la salida, me gustaría llamar a la API C subyacente que sospecho que existe. ¿Alguien sabe si hay tal llamada o si el tiempo de actividad (1) simplemente procesa los registros obtenidos de wtmp?


La llamada al sistema que está buscando es sysinfo ().

Se define en sys / sysinfo.h

Su firma es: int sysinfo (struct sysinfo * info)

Desde el kernel 2.4, la estructura ha sido así:

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

¡Que te diviertas!


Lea el archivo /proc/uptime y tome el primer número decimal como el tiempo de actividad en segundos.

Del man 5 proc :

/proc/uptime This file contains two numbers: the uptime of the system (sec‐ onds), and the amount of time spent in idle process (seconds).


También hay clock_gettime (probablemente necesita -lrt ). El comportamiento que he visto (no voy a afirmar que está garantizado), pero dado CLOCK_MONOTONIC como clk_id es que devuelve el tiempo de actividad del sistema en el parámetro struct timespec * dado.

#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; }