Ich führe ein C-Programm in Linux, das den Dateinamen plus Benutzer- und Gruppenbesitz ausgibt. Ich verwende getpwuid
und getgrgid
.getpwuid und getgrgid verursacht segfault, wenn der Benutzer nicht existiert für die angegebene UID
Wenn die Datei einem nicht existierenden Benutzer gehört (dh es gibt keinen Eintrag in /etc/passwd
für die angegebene UID auf meinem Computer), wird mein Programm mit "terminated by signal 11" abgeglichen.
Wie kann ich mein Programm so verhalten wie ls
, so dass es numerischen Ausdruck UID, wenn Benutzer nicht vorhanden ist, anstelle von segfaulting?
Relevante Codeausschnitt ist unten:
lstat(filename,&fileStat)
struct group *grp;
struct passwd *pwd;
pwd = getpwuid(fileStat.st_uid);
printf(" %s", pwd->pw_name);
grp = getgrgid(fileStat.st_gid);
printf(" %s", grp->gr_name);
überprüfen Sie, ob Pwd nicht NULL ist, bevor Sie auf seinen Wert zugreifen. Und wenn der Wert NULL ist, verwenden Sie die UID von Lstat als Name –