Beiträge von hscJH

    Bedienfolgen unter Win 10:

    Win 10 openSUSE Leap 15.4 als App installieren,

    zusätzlich g++ - Compiler mit zypper installieren,

    zwei Konsolen openSUSE öffnen,

    in beiden Konsolen mit su <Passwd> als root einloggen,


    mv s.cpp.txt s.cpp

    mv e.cpp.txt e.cpp

    g++ -o s s.cpp

    g++ -o e e.cpp


    --> Beide Dateien lassen sich problemlos kompilieren.

    Die Zugriffsrechte der Dateien e und s ändern (chmod 744 s e),

    mit ./e das 1. Programm starten, die ProzessId wird angezeigt,

    mit ./s <Prozessid vom 1. Programm> das 2. Programm starten.


    --> Die Fehlermeldung "Funktion not implemented" erscheint.


    Unter openSUSE 10.2 tritt der Fehler nicht auf.

    @Igel1954:

    Hallo,

    beim aktuellen openSUSE gnu-c++ Compiler ist der Datentyp "short" 16 Bit, d.h der maximale Zahlenwert beträgt 32767 (=0x7FFF) begrenzt.

    Mit dem Rückgabewert der Funktion semget vom Typ int hat das nix zu tun,

    es genügt also nicht den Rückgabewert aus der Funktion semget in eine long - Variable zu speichern.


    Der Fehler tritt im Linux-Kern auf, in der Funktion semop gibt es da wohl einen Zahlenüberlauf.

    Meine Frage:

    Weiß jemand, wie man einen Fehler im Linux-Kern mit

    https://bugzilla.opensuse.org/index.cgi meldet?

    woher bekommt man de Sourcecode zu semop?


    Danke und Gruß

    hscJH

    Berichtigung:

    Momentan sind wir bei openSUSE LEAP 15.1 bei der Kern-Version 4.12.14-lp 151.28.52-default.

    Gemäß "man 2 semop" wird im letzter Absatz im Abschnitt BUGS eine Fehlerbeseitigung in Kernel 2.6.11 genannt.

    Der von mir genannte Fehler hat also nichts mit dem Fehler zu tun, der im openSuse-manual "man 2 semop",

    im letzten Absatz im Abschnitt BUGS beschrieben ist.

    Als "normal" würde ich das Verhalten nicht bezeichnen.

    Das wäre ja genauso, als wenn beim Auto nach einer Stunde fahrt der Motor urplötzlich ausginge.


    Gruß

    hscJH

    Hallo,

    Igel1954:

    der Fehler tritt bei der 32-Bit und bei der 64-Bit-Umgebung auf.

    Beim erstmaligen Creieren einer Semaphore, in meinen Fall mit

    int semid = semget (KEY, 2, IPC_CREAT | IPC_EXCL | 0666),

    bekommt man die semid = 0 zurückgeliefert.

    Nach jedem Löschen der Sema und Neuanlegen wird die semid um 32768 (0X7FFF) hochgezählt.

    In meinem Fall tritt der Fehler auch beim Stand des Schleifenzählers von 32768 auf.

    Ich vermute, daß das damit zusammenhängt.


    Berichtigung:

    Meinst du im

    man 2 semop

    den letzten Absatz im Abschnitt BUGS ?

    Weißt du, wann der Kernel mit der Fehlerbeseitigung 2.6.11 raus kommt?


    Danke und Gruß hscJH

    In den beiden beigefügten C-Programmen wurde unter Verwendung von Semaphoren ein Handshake-Mechanismus in einer Schleife programmiert.

    Wenn der Schleifenzähler in beiden Programmen den Wert 32768 (= 0X7FFF) erreicht hat liefert der Aufruf von semop (...) den Wert -1 zurück,

    die globale Systemvariable errno hat dann den Wert ERANGE.


    Der Fehler ist immer reproduzierbar, er tritt auch in openSUSE 10.2 auf.


    Mit den beiden Dateien x.c.txt und y.c.txt ist der Fehler reproduzierbar.

    Vorgehensweise:


    Die beiden beigefügten Dateien x.c.txt nach x.c und

    y.c.txt nach y.c umbenennen,

    Beide Source-Code Dateien compilieren mit

    g++ -o x x.c und

    g++ -o y y.c

    zwei Terminal-Fenster öffnen, im ersten Terminal-Fenster mit ./x das eine Programm,

    im zweiten Terminal-Fenster mit ./y das andere Programm starten:


    --> Nach 32768 durchläufen liefert der Funktionsaufruf Aufruf von

    ...

    struct sembuf semaphore;

    semaphore.sem_num = semNum;

    semaphore.sem_op = op;

    semaphore.sem_flg = SEM_UNDO;

    if( semop (semid, &semaphore, 1) == -1) {

    return -1;

    }


    als Rückgabewert -1, die Variable errno hat den Wert ERANGE.


    Zugegeben: In kommerziellen Anwendungen wird es kaum vorkommen, daß sooft die Funktion semop aufgerufen wird,

    wohl aber in technischen Anwendungen, beispielsweise beim Steuern von Prozessen, etc.

    OpenSuse Linux LEAP 15.1:

    In einem c++-Programm möchte ich im ersten Prozess ein Shared Memory mit shmget(...) und shmat(...) anlegen und in dem angelegtem Speicher ein cpp-Object abspeichern.

    Im zweiten Prozess möchte ich aus dem Shared Memory unter der Adresse, die shmat() zurückliefert, das im ersten Prozess gespeicherte Objekt zurücklesen.

    Das Problem ist: Beim Lesen des Objects aus dem Shared memory über eine C++-Funktion wird Programmcode ausgeführt, der im Shared Memory gespeichert ist. Als Zugriffsattribute für das Shared Memory ist aber nur lesen/schreiben und kein execute möglich.

    Hat jemand einen Lösungsvorschlag?

    Im Gegensatz gibt es in Windows das Problem nicht, da kann man ein C++-Objekt im Shared Memory abspeichern und Objekt-Funktionen ausführen.

    Hallo,


    folgendes Problem: Ich habe auf meinem HP-EliteBook-Laptab neben Win 10 erfolgreich Suse Linux 15.1 Leap installiert.
    Nach dem Hochlauf des Linux-Systems kann ich allerdings, ohne mich vorher anzumelden, im Internet surfen.
    Da ich ohne Anmeldung und Passworteingabe im Internet surfen kann hat meiner Meinung jedermann über das Internet Zugang zu meiem PC.


    Daher meine Frage:
    Was muß ich tun, damit am Ende des Hochlaufs der Anmeldebildeschirm erscheint und ich erst nach der Anmeldung als Standartuser ins Internet gehen kann?


    Im vorraus besten Dank für die Antworten.
    Gruß
    hscJH

    Habe mich verschrieben, ich wollte schreiben: Die beiden Dateien /etc/SUSE und /etc/os-release existieren bei mir nicht.
    Der PC hat einen 32-Bit Intel Celeron Prozessor, 1 GB RAM und ein Intel Motherboard, der PC ist auch schon 12 Jahre alt.


    Woher bekommt man am besten das aktuelle openSuse ? Vom Internet?
    Wenn ich mir das aktuelle Linux-Buch von Michael Kofler zulege, ist da auch eine DVD drinnen mit der aktuellen Version?