c - 如何重置 getutent() 的指针

标签 c linux

以下是我正在处理的最终代码。我可以使用 sleep() sleep 并再次显示其他消息,但我无法打印我最初想要的内容,它位于第二个 while 循环 中。据我测试,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);
    }

}

最佳答案

您想使用 setutent() 将文件指针设置回 utmp 文件的开头。

关于c - 如何重置 getutent() 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2002229/

相关文章:

linux - 了解标准输入、标准错误、标准输出

c++ - 使用 c/c++ 的文件 IO 技巧

ios - 解除绑定(bind) Open GL ES 纹理的正确方法?

objective-c - 将字符串转换为 float ,而不使用 c 中的内置函数

linux - 如何使用 awk 命令从 .gz 文件格式中提取输出数据

linux - jprobe do_execve 不适用于内核 4.1

c++ - 客户端未收到 UDP 连接响应

c - C 中 extern 关键字的行为

linux - 永久设置 make 使用的线程数

linux - 获取卷 udf cd/dvd 磁盘的序列号?