2015-10-27 34 views
0

我試圖通過展示我的功能之一我的用戶ID和組ID在我的C程序。用戶ID正確顯示(501),但我的組ID不是。當我使用檢查我的組ID命令「ID -g」我得到20,但是當我用我的功能,運行它通過我的節目,我得到了價值1如何在C中正確顯示groupID(GID)?

這是我的代碼。

int Registerpw(char **args){ 

    register struct passwd *pw; 
    register uid_t uid; 
    int c; 
    register gid_t gid; 
    register struct group *grp; 
    grp = getgrgid(gid); 

    uid = geteuid(); 
    pw = getpwuid(uid); 


    if (pw) 
    { 
      printf("%d,",uid);  // userID 
      printf("%d,", gid); //groupID 
      puts (pw->pw_name); 
      puts(grp->gr_name); 


    } 
    else{ 
     printf("failed\n"); 
    } 
    return 1; 
} 

我的輸出

501,1,USERNAME 
daemon 
+1

你缺少分配值'gid'聲明? –

+0

@MarkPlotnick'寄存器gid_t gid'是獲得GID – Recap

+0

@Recap這行代碼僅聲明&定義gid'的'可變,而使值初始化。上面的代碼從未初始化過'gid'。 – starrify

回答

4

你的代碼只是宣佈&定義的gid變量,但離開它的值初始化。您應該正確的值賦給它:

register gid_t gid; 
gid = getgid(); 

或者乾脆:

register gid_t gid = getgid(); 
+0

感謝您的澄清。那是我的一個愚蠢的錯誤。 – Recap

+0

你知道我怎麼能夠在一行中打印所有這些?如果你看看我的輸出結果,你可以看到它在下面的行上打印了groupName,因爲我在「puts」中擁有它。你知道我可以如何避免在「放入」中使用它,也可能以不同的方式打印它? – Recap

+0

@Recap'puts'會追加一個換行符嘗試打印字符串。如果你不想換行字符,你可以使用類似'的printf(「%s」時,PW-> pw_name);'代替。 – starrify