[英]Compare two passwd structures
我有一個問題,我已經盡可能地縮小了范圍。 我想計算/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()
你會好到哪里去。
從手冊頁:
setpwent()
函數倒回到密碼數據庫的開頭。
endpwent()
函數用於在執行完所有處理后關閉密碼數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.