linux獲取各種程序型別的資訊

2021-07-16 17:14:58 字數 3759 閱讀 9188

1 password file

終端上輸入cat /etc/passwd

可以看見很多相關資訊。

也可以通過以下函式:

#include

#include

struct passwd* getpwnam(const char* name);

struct passwd* getpwuid(uid_t uid);

int getpwnam_r(const char* name, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result);

int getpwuid_r(uid_t uid, struct passwd* pwd, char* buf, size_t buflen, struct passwd** result);

結構體passwd():

struct passwd  ;

如果不能理解每個成員的意思,可以通過man 5 passwd查閱。

getpwuid和getpwnam的程式用例:

#include

#include

#include

#include

static void printfpwd(const passwd* pwdinfo)

int main(int argc, char* argv)

getpwuid_r用例:

#include

#include

#include

#include

#include

static void printfpwd(const passwd* pwdinfo)

int main(int argc, char* argv)

struct passwd pwd;

struct passwd* result = null;

int ret = getpwuid_r(uid, &pwd, buffer, len, &result);

if(!result)

printf("----------pwd---------- \n");

printfpwd(&pwd);

printf("\n\n----------result----------\n");

printfpwd(result);

printf("\n\n----------buffer----------\n");

printf("buffer: %s\n", buffer);

return 0; }

以下三個函式與讀取/etc/passwd相關:

#include

#include

struct passwd* getpwent(void);

void setpwent(void);

void endpwent(void);

getpwent: 獲取passwd檔案中的乙個口令,嚴格的說,是獲取下乙個口令

setpwent: 將獲取口令重置到第乙個

endpwent: 關閉由getpwent開啟的檔案

程式用例:

#include

#include

int main(int argc, char* argv)

endpwent();

return 0; }

2 shadow passwords

看著名字就知道它藏的好深。

有以下函式可以操作這個檔案:

#include

struct spwd* getspnam(const char* name);

struct spwd* getspent(void);

void setspent(void);

void endspent(void);

struct spwd* fgetspent(file* fp);

struct spwd* sgetspent(const char* s);

int putspent(struct spwd* p, file* fp);

int lckpwdf(void);

int ulckpwdf(void);

/* gnu extension */

#include

int getspent_r(struct spwd* spbuf, char* buf, size_t buflen, struct spwd** spbufp);

int getspnam_r(const char* name, struct spwd* spbuf, char* buf, size_t buflen, struct spwd** spbufp);

int fgetspent_r(file* fp, struct spwd* spbuf, char* buf, size_t buflen, struct spwd** spbufp);

int sgetspent_r(const char* s, struct spwd* spbuf, char* buf, size_t buflen, struct spwd** spbufp);

其中的struct spwd定義如下:

struct spwd  ;

getspnam程式用例:

#include

#include

#include

#include

int main(int argc, char* argv)

printf("name: %s\t password: %s\n", pwd->sp_namp, pwd->sp_pwdp);

return 0; }

如果在普通賬號下執行,就會發生錯誤,因為讀取檔案的許可權不夠。

3 group file

位於/etc/group

有以下函式可以操作:

#include

#include

struct group *getgrnam(const char *name);

struct group *getgrgid(gid_t gid);

int getgrnam_r(const char *name, struct group *grp, char *buf, size_t buflen, struct group **result);

int getgrgid_r(gid_t gid, struct group *grp, char *buf, size_t buflen, struct group **result);

用法可以參考passwd file

使用者在登陸的時候,就會獲取到group id,屬於某乙個group,可以通過命令來改變所屬的組。但總體來說不方便。

於是,出現了supplementary group ids(附加組id)。

4 獲取本地主機名

#include

int gethostname(char* name, size_t namelen);

#include

#include

int main(int argc, char* argv) ;

gethostname(name, sizeof(name));

printf("name: %s\n", name);

return 0; }

Linux 獲取程序管理

實驗環境 vmware workstation pro下linux red hat 核心版本 2.6.32 1.通過vim編寫程式 首先程式需要包含所需要的標頭檔案。sys types.h資料結構pid t在此構造 sys wait.h函式wait在內定義 sys time.h和sys resour...

37 Linux中的各種檔案型別及如何獲取

檔案 普通檔案和二進位制檔案,本質上都是數字 普通檔案 字元檔案ascii碼,c txt檔案都是文字檔案,以ascii碼解讀這些數字,能使人輕鬆讀懂 二進位制檔案 a.out bin 都是二進位制檔案,在linux系統裡面不區分,只能知道了型別再解構 目錄檔案 就是資料夾,也是一種檔案不過是特殊檔案...

HTML DOM物件 獲取各種型別的節點

html dom物件 獲取各種型別的節點 1.節點 node 的分類 nodename nodevalue nodetype 元素節點 標籤名 null 1nt 屬性節點屬性名 屬性值 2 文字節點 text 文字值 3 注釋節點 comment 注釋內容 8 2.元素節點的4種獲取方式 var s...