【发布时间】:2020-02-04 23:56:54
【问题描述】:
我有一个问题,我已经尽可能地缩小了范围。我想计算/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()。手册页不是很清楚,但我会尝试在第二个计数循环之前调用endpwent()而不仅仅是setpwent()。