C mehrere Thread(fork()) eine Variable Zugriff von allen Threads / einfache Stringoperation



  • Ich müsste für einen einfachen Server pro Client einen Thread abspalten wenn ich das tue soll kontolliert werden ob der User der sich anmeldet im in einem LDAP dienst vorhanden ist. Ist er das nicht oder das Passwort falsch soll der Benutzer nach 3 Versuchen gesperrt werden... dehalb müsste habe ich mir gedacht ein 2 diminsionales Array anzulegen mit Namen und Loginversuche.

    nur müsste das von allen Threads erreichbar sein wie mach ich das am Besten?

    außerdem habe ich da noch eine sicher ehe leichte Frage... ich bekomme ale Startparamter eine verzeichnis Pfad ... wie kann ich an den Pfat z.B. /root/ noch einen Dateinamen z.B: Datei anhängen das es so ausschaut /root/datei der dateiname wird an den server übergeben mit GET Dateiname ich müsste also aus dem char* string noch den dateinamen rausfiltern. Wie macht man sowas am besten?
    mit strcat kann ich anhägen aber womit bekomme ich den Dateinamen?

    Komme leider mehr aus der objektorientierten ecke.
    Danke



  • Morgen,

    ich würde ein globales (oder für jeden Thread zugängliches) Array
    definieren, dessen Zugriff mit mutex gesichert ist.

    pthread_mutex_t mutex_access =  PTHREAD_MUTEX_INITIALIZER;
    
    int check_access( ... ) {
       pthread_mutex_lock(&mutex_access);
    
       ... // checken und eventuell ausschließen
    
       pthread_mutex_unlock(&mutex_access);
    }
    

    Damit ist sichergestellt, dass sich immer nur ein Thread innerhalb
    der Funktion check_access() befindet. Sollten mehrere Funktionen
    auf das Array zugreifen, mußt du auch diese mit dem selben Mutex
    sichern.

    Zu deiner zweiten Frage:

    char name[1024];
    sprintf(name, "%s\\%s", path, filename); // für die windows welt
    

    So kannst du die Strings path und filename hintereinander schreiben.
    Dabei werden sie durch ein Backslash \ (in der Unixwelt verwendet man
    einfache Slashes /) getrennt.

    Gruß mcr



  • OOps, deine zweite Frage habe ich wohl falsch verstanden.

    Wenn du den Dateinamen aus einem String auslesen möchtest, mußt du
    das letzte Backslash (in der Linuxwelt nur Slash) suchen, und
    anschließend den restlichen String mittels strcpy (oder einfaches +)
    herauslesen.

    Gruß mcr



  • Ich habe mich wohl auch etwas ungeschicht ausgedrückt
    also

    ich bekomme mit size=revr(new_socket, buffer, 1023,0);
    den string GET DATEINAME gesendet
    buffer ist vom Typt char *buffer = malloc(1024);

    jetzt würde ich benötigen dass ich aus buffer den string GET DATEINAME extrahieren kann, dann das GET entferne sodass ich in eine Variable vom typ char* string den string DATAINAME stehen habe.

    nur habe ich keinen Plan wie das gehen soll... ich stelle hier sicher sehr blöde fragen



  • Mit der Funktion strstr() kannst du in Strings nach Teilstrings suchen.

    BEZEICHNUNG
           strstr - finde einen Teilstring
    BEZEICHNUNG
           #include <string.h>
           char *strstr(const char *haystack, const char *needle);
    BESCHREIBUNG
           Die Funktion strstr() findet die erste Position der Zeichenfolge needle
           im String haystack.  AbschlieBende `\0'-Zeichen werden nicht  miteinan-
           der verglichen.
    RUCKGABEWERTE
           Die  Funktion  strstr() gibt einen Zeiger auf den Anfang der gefundenen
           Zeichenkette in haystack zuruck oder NULL, wenn die Zeichenkette  nicht
           gefunden wurde.
    

    Ich hoffe, dies hilft dir.

    char *tmp = strstr(buffer, "GET");
       char name[1024];
       sprintf(name, "%s", tmp+4);
    

    Dann noch einmal den String auf Richtigkeit überprüfen und eventuell
    korrigieren.

    Gruß mcr

    PS: entsprechende Fehler musst du selbst noch abfangen.



  • Das hilft mir sehr!
    vielen dank


Anmelden zum Antworten