Portál AbcLinuxu, 21. prosince 2025 06:35
potrebujem zistit aktualny cas a datum, vyuzitie procesora pripadne pamate, nazov stroja, OS a architektury.
head -2 /proc/driver/rtc cat /proc/loadavg head -3 /proc/meminfo cat /proc/sys/kernel/hostnamea možno niečo z /proc/cpuinfo
Bez time.h tedy znamená bez libc?
Jinak existují kernely zkompilovaný bez VDSO podpory, takže se pak musí volat klasicky syscall. To se pak můžeš inspirovat zdrojákama libc.
Jinak assembler znamená nulovou portabilitu a na zjištění architektury potřebuješ volat kernel
.
%rdi, ne v %rbx.
struct timeval; se musí předat v registru RDI, pokud buildíš pro x86-64. Na x86 by ti ten kód fungovat měl. Víc si přečti třeba tady: https://stackoverflow.com/a/2538212
Na x86-64 mi funguje toto:
#include <sys/syscall.h>
#include <sys/time.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
int main()
{
const long SYSCALL_NO = SYS_gettimeofday;
long ret;
struct timeval tv;
char date[65], time[65];
asm("syscall;"
: "=a"(ret)
: "a" (SYSCALL_NO), "D" (&tv)
: "rcx", "r11"
);
if (ret != 0) {
printf("FAIL: %s\n", strerror(ret));
return 1;
}
strftime(date, 65, "%d.%m.%Y", localtime((time_t *) &tv.tv_sec));
strftime(time, 65, "%T", localtime((time_t *) &tv.tv_sec));
printf("Date: %s %s \n", date, time);
return 0;
}
-masm=intel do CFLAGS.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.