Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Systemcalls

  1. #1
    Registrierter Benutzer
    Registriert seit
    15.07.2003
    Beiträge
    8

    Systemcalls

    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

  2. #2
    Registrierter Benutzer
    Registriert seit
    16.06.2003
    Beiträge
    73
    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:

    Code:
    #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

  3. #3
    Registrierter Benutzer
    Registriert seit
    15.07.2003
    Beiträge
    8
    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •