PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Systemcalls



pyro
15-07-2003, 10:01
Moin!

Ich hoffe ihr könnt mir hier helfen.

Ich muss die aktuelle load, freeram, sharedram usw. auslesen.
Dazu bin ich auf den Systemcall sys_sysinfo() gestoßen. Ich probiere also folgendes:

#include <linux/kernel.h>
#include <linux/sys.h>
#include <unistd.h>
#include "sysinfo.c"

int i=0;

struct sysinfo *s;

int main (void)
{
i = sys_sysinfo(s);

if(i==0)
{
printf("Aufruf von Sysinfo erfolgreich\n");
} else { printf("Aufruf von Sysinfo nicht erfolgreich\n"); }

return 0;
}

Diese Datei sysinfo.c sieht so aus:

#include <linux/unistd.h>

_syscall1(int,sysinfo,struct sysinfo *,s)

Die Sache mit der sysinfo.c hab ich aus nem Buch.

Beim Kompilieren krieg ich folgende Fehler:

[root@Asgard Sysinfo]# gcc test.c
/tmp/ccMpdvjR.o(.text+0x20): In function `sysinfo':
: undefined reference to `errno'
/tmp/ccMpdvjR.o(.text+0x4e): In function `main':
: undefined reference to `sys_sysinfo'
collect2: ld returned 1 exit status

Grüße und Danke für Eure Zeit

pyro

almoeli
15-07-2003, 11:28
Hi,

der Systemaufruf heißt sysinfo und nicht sys_sysinfo. Du kannst ihn einfach verwenden, wenn du den Header sys/sysinfo.h mit einbindest.
Es gibt natürlich auch eine man Page zu dem Kommando: man sysinfo
Auch Vorsicht ist bei deiner Deklaration der Struktur s geboten. Du deklarierst nur den Zeiger darauf, hast dadurch aber noch keinen Speicherplatz wo die Struktur überhaupt abgelegt wird. Da der Zeiger nicht initialisiert wird, wirst du so einen Segmentation Fault bekommen.
Folgendes Programm zeigt dir wie man sysinfo verwendet:



#include <sys/sysinfo.h>
#include <stdio.h>
#include <errno.h>

int main()
{
struct sysinfo sysi;

if (sysinfo(&sysi) != 0)
printf("sysinfo erfolglos: errno: %s\n", strerror(errno));
else {
printf("Totel ram: %d\n", sysi.totalram);
printf("Free ram: %d\n", sysi.freeram);
}

return 0;
}

Die einzelnen Elemente der Struktur sysinfo kannst du in der sysinfo man page nachlesen.
Übersetzt wird das Programm einfach mit:
gcc -o test test.c

Gruß

almoeli

pyro
15-07-2003, 12:13
Hi almoeli,

danke fuer deine Antwort.
Laut meinem Buch heisst die Funktion tatsächlich sys_sysinfo().
Da hab ich auch den Teil mit der sysinfo.c her.

Aber da dein Beispiel funktioniert, halte ich mich daran. Danke nochmals.

Grüße pyro