gpt4 book ai didi

比较两个 passwd 结构

转载 作者:行者123 更新时间:2023-12-02 09:04:32 24 4
gpt4 key购买 nike

我有一个问题,我已经尽可能地缩小了范围。我想将 /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() 时,您只是重置了一个内部指针,该指针跟踪已解析 条目。当您在setpwent() 之后再次执行getpwent() 时,/etc/passwd 文件将不会被第二次访问,因为信息已经解析过了。

如果你想强制getpwent()每次都重新打开并解析/etc/passwd,你应该调用endpwent() 首先。将对 setpwent() 的调用替换为 endpwent(),您就可以开始了。


来自 the manual page :

The setpwent() function rewinds to the beginning of the password database.

The endpwent() function is used to close the password database after all processing has been performed.

关于比较两个 passwd 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60058907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com