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
alsoich 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