我正在linux中運行一個C程序,它打印文件名加上它的用戶和組的所有權。我正在使用getpwuid
和getgrgid
。getpwuid和getgrgid導致segfault當用戶不存在給定的UID
當文件被不存在的用戶所擁有(即我的機器上的給定UID中沒有/etc/passwd
的條目)時,我的程序會出現「由信號11終止」的段錯誤。
我該如何讓我的程序的行爲與ls
相同,以便在用戶不存在時打印數字UID而不是分段?
相關的代碼片斷如下:
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);
檢查pwd在訪問它的值之前是否不爲NULL。如果值爲NULL,則使用lstat中的uid作爲名稱 –