#include <pwd.h>
#include <stdio.h>
struct passwd* Getpwnam_(const char* name)
{
static struct passwd* passwd;
while((passwd=getpwent())!=NULL) /* get pw entry line by line */
{
if(strcmp(passwd->pw_name, name)==0) /* find the same name */
return passwd;
}
if(passwd==NULL) /* there is no matching name */
return NULL;
}
int
main(void)
{
printf("%ld %ld\n", (long)(Getpwnam_("root")->pw_uid), (long)(Getpwnam_("cho")->pw_uid));
}
Auf dem obigen Code, wenn ich wie Hauptfunktionen verwenden:Segmentierungsfehler, wenn statischen Variable
printf("%ld\n", (long)(Getpwnam_("root")->pw_uid));
printf("%ld\n", (long)(Getpwnam_("cho")->pw_uid));
Es ist gut bedient. Aber wenn ich einen printf()
mit zwei Getpwnam_()
als Argumente verwende, erhalte ich einen Segmentierungsfehler. Ich denke, es gibt kein Problem in meiner Code-Operation.
Aber warum gibt mir das einen Segmentierungsfehler ??
existiert der Benutzer 'cho' auf Ihrem System? – fluter
@fluter: Ja, sicher –
Sind Sie sicher, dass Getpwnam_() Sie in beiden Aufrufen nicht NULL zurückgibt? Ich glaube, dass Sie NULL für das root-Passwort bekommen sollten, wenn Sie Ihr Programm als Nicht-root-Benutzer ausführen – GMichael