簡體   English   中英

比較兩個 passwd 結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM