Hallo Community, bin neu hier und suche Rat und Hilfe. Ich bin absolut neu in C und mache gerade einen Linux-Kurs. Nichts weltbewegendes, aber im Augenblick knackig für "Nichtskönner" wie mich. Frage: Ich soll einen Syscall schreiben. Das ist passiert mit: War auch kein Problem.
#include <linux/linkage.h> asmlinkage long sys_prosys(void) { long ergebnis=0; int i; for (i=1;i<=10;i++) { ergebnis +=i; } return ergebnis; }
Kernel compiliert und Rest alles OK. Syscall wird aufgerufen mit:
#include <sys/syscall.h> #include <unistd.h> #include <stdio.h> #include <errno.h> #define __NR_prosys 337 long prosys () { return syscall(__NR_prosys); } main() { printf("Berechnung nach der Gauss-Formel \n"); printf("Die Summe ist: %d \n", prosys()); }
GCC gemacht etc. Auch alles OK und es kommt 55 dabei raus. Es geht um Gaussche Summenformel.Wunderbar. So soll es sein.
Der Syscall soll nun so gestaltet werden, dass eine Zahl von maximal 70000 eingegeben werden kann und eben das Ergebnis ausgegeben wird. Ich habe da schon so einiges rausgerissen, aber erziele immer wieder einen Minuswert, also einen Überlauf.
So sieht es bisher aus: (hier stehen noch int Werte aber ich habe da schon alles versucht) Syscall:
#include <linux/linkage.h> asmlinkage long sys_prosys(int n) { long ergebnis=0; int i; for (i=1;i<=n;i++) { ergebnis +=i; } return ergebnis; }
Header:
#include <unistd.h> #define __NR_prosys 337 long long prosys (int n) { return syscall(__NR_prosys,n); }
C:
#include <sys/syscall.h> #include <stdio.h> #include <errno.h> #include “gauss.h“ int wert; int main(void) { printf( “Bitte geben Sie eine Zahl ein \n“); fflush(stdin); scanf( “%d“, &wert); if(wert>70001) { printf( “Ihr eingegebener Wert ist zu groß – nur bis 70000 \n“); } else { printf("Berechnung nach der Gauss-Formel \n"); printf("Die Summe ist: %ld \n", prosys(wert)); } return 0; }
Vielleicht hat ja wer von Euch eine zündende Idee: Danke