2010-01-04 71 views
0

以下是我正在處理的最終代碼。我可以睡覺並再次顯示其他睡眠信息(),但我無法打印出我最初想要的內容,這是第二張內部循環。據我測試,while((ptr = getutent())!= NULL)將是問題,但我不知道如何解決。如果有人能幫助我,我將不勝感激。謝謝如何重置getutent()的指針

注意:程序顯示當前登錄用戶每5秒鐘,直到用戶用Ctrl + c停止。

#include <utmp.h> 
#include <pwd.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 

int main(void) 
{ 
    struct utmp *ptr; 
    struct passwd *pwd; 

    while(1) 
    { 

     while((ptr=getutent()) != NULL) 
     { 
      if(ptr->ut_type==USER_PROCESS) 
      { 
       pwd=getpwnam(ptr->ut_user);  
       printf("USERNAME = %s | ID = %d | GID = %d | ",p 
tr->ut_user,pwd->pw_uid,pwd->pw_gid); 
       printf("HomeDir = %s | HOST = %s\n",pwd->pw_dir, 
ptr->ut_host); 
      } 
     } 

     sleep(3); 
     fflush(stdout); 
    } 

} 

回答

2

您想使用setutent()將文件指針設置回utmp文件的開頭。

+0

哦,我明白了。讓我試試setutent() – Devyn 2010-01-04 21:12:06

+0

哦,你是專業!非常感謝。這就是我想要的! – Devyn 2010-01-04 21:13:11

+1

當您完成釋放函數族使用的文件描述符時,使用'endutent()'。 (getpwent(),setpwent(),endpwent()],[getgrent(),setgrent(),endgrent()]和[getutent(),setutent(),endutent() ]。僅列出三組這樣的功能。 – 2010-01-05 01:31:39