比较两个passwd结构

虫子

我有一个问题,我已尽我所能缩小了范围。我想/etc/passwd两次计算行数一次作为参考,一次作为检测任何更改。

我初始化一个passwd结构并计算其中的条目数。然后我打电话setpwent()完成初始化第二个passwd结构的操作后,请注意,我添加了一个sleep调用,因此有足够的时间添加另一个用户。问题是,即使我添加了新用户并在添加新结构后初始化了新结构,新结构也与第一个结构相同。所以没有区别。

#include <stdio.h>
#include <pwd.h>
#include <unistd.h>
int main()
{
    for(;;)
    {
        struct passwd *i;
        int y = 0;
        while((i = getpwent()) != NULL)
            y++;
        printf("Lines : %d\n", y);
        setpwent();
        sleep(30);
        struct passwd *j;
        int x = 0;
        while((j = getpwent()) != NULL)
            x++;
        printf("Lines : %d\n", x);
        setpwent();
    }
}
马克·博内利

您正在使用getpwent(),它在首次调用时会读取/etc/passwd文件并在内部对其进行解析,从而为您提供所有条目。之后,当您执行时setpwent(),您仅需重置内部指针即可跟踪已解析的条目。当您在getpwent()之后再次执行操作setpwent()/etc/passwd将不再访问文件,因为该信息已被解析。

如果您想每次都强制getpwent()重新打开并进行解析/etc/passwd,则应endpwent()调用更换的电话setpwent()endpwent()你会好到哪里去。


手册页

setpwent()函数后退到密码数据库的开头。

endpwent()完成所有处理后,功能用于关闭密码数据库。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章