PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : crypt() und usleep()



ContainerDriver
25-06-2003, 11:49
Hallo,
ich habe mir einen Bildschirmschoner für die Konsole gebastlet (mit ncurses).
Das Passwort liegt in einer Datei in $HOME. Der User gibt das Passwort beim BS ein, der liest aus der Datei das Passwort, verschlüsselt das user-pass und vergleicht.
In diesem Prog benötige ich aber auch usleep() (oder nanosleep()) damit der BS besser aussieht und das system nicht so viel belastet.
Inkludiere ich unistd.h wie in "man crypt" angegeben sagt der Compiler, das es die Funktion usleep() nicht gibt.
Kann man usleep() oder nanosleep() und crypt nutzen und wie geht das?


Vielen Dank für die Antwort

MFG Florian

almoeli
25-06-2003, 14:08
Hi,

da braucht man ein bißchen mehr Input:

- Welche Fehlermeldung gibt der Compiler aus (Fehler beim compilen oder beim linken)?
- Wie lautet der Aufruf des Compilers?

Ein Schnelltest auf SuSE8.2 ergab, dass es keine Probleme gibt, wenn man usleep verwendet und unistd.h einbindet.

Gruß

almoeli

ContainerDriver
26-06-2003, 10:20
Also,
die Fehlerausgabe weis ich jetzt nicht aus dem ff und auf diesem PC hier ist ein verdammtes drecksOS.
Jedenfalls kam der Fehler nicht beim Linken. Die Fehlermeldung lautete in etwa (nur in Eng):"Funktion usleep() nicht gefunden".

Das Problem liegt wohl an der #define-Anweisung, die man für crypt() braucht (#define _X_OPEN (glaub ich)). Fügt man diese der Quelldatei hinzu findet der Compiler crypt(), aber kein usleep(), lässt man sie weg, findet er usleep() aber kein crypt().

Der Aufruf des Compliers lautet:
>g++ prog.cpp -o prog -lcrypt

Ich hab übrigens SuSE Linux 8.0 und die Compilerversion ist 2.95 (?).

Ich hoffe das reicht.

MFG

Florian

almoeli
26-06-2003, 11:53
Hi,

irgendwie kann ich deinen Fehler nicht nachvollziehen. Auf SuSE 8.1 brauch ich gar keinen #define zu setzen, weil die in features.h (wird von unistd.h angezogen) gesetzt werden und der g++ Standardmäßig das Symbol _GNU_SOURCE definiert. Dann definiert features.h die __USE_XOPEN und noch weitere.
In der Manpage von crypt steht, dass man das Symbol _XOPEN_SOURCE setzen soll. Wird eigentlich auch von features.h und _GNU_SOURCE erledigt. Ansosnten versuch mal _XOPEN_SOURCE auf 500 zu setzen, um die Features der glibc5 zu aktivieren.
Sollte das nicht helfen, dann muß du die anderen von deinem Source angezogenen Header mal überprüfen, ob die irgendwelche Symbole entfernen. Prüfe in deinem Sourcecode ob bestimmte Symbole gesetzt sind, insbesondere die, welche das einbinden von crypt und usleep in unistd.h steuern. Diese sind
- __USE_XOPEN für crypt
- __USE_XOPEN_EXTENDED für usleep
Überprüfen kannst die im Source mit folgender Befehlsfolge:

#ifdef __USE_XOPEN
#warning __USE_XOPEN gesetzt
#endif

Gibt beim compilieren dann ne warning aus.

Viel Erfolg

almoeli