Как сбросить указатель getutent () - PullRequest
0 голосов
/ 05 января 2010

Ниже приведен окончательный код, над которым я работал. Я могу спать и снова показывать другие сообщения с помощью sleep (), но я не могу напечатать то, что первоначально хотел, который находится внутри 2nd while loop . Насколько я тестировал, while ((ptr = getutent ())! = NULL) было бы проблемой, но я не знаю, как решить. Буду очень признателен, если кто-нибудь сможет мне помочь. Спасибо

Примечание. Программа показывает текущего пользователя для входа каждые 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);
    }

}

1 Ответ

2 голосов
/ 05 января 2010

Вы хотите использовать setutent (), чтобы вернуть указатель файла в начало файла utmp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...