pag133
這裡的各類id都是針對使用者的
口令檔案:
/etc/passwd檔案中的字段(linux)(struct passwd的成員)
使用者名稱---------------------------char *pw_name
加密口令------------------------char *pw_passwd
數值使用者id---------------------uid_t pw_uid
數值組id------------------------gid_t pw_gid
注釋欄位------------------------char *pw_gecos
初始工作目錄-------------------char *pw_dir
初始shell------------------------char *pw_shell 如:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
shell欄位包含了乙個可執行程式名,他被用做該使用者的登入shell(ubuntu下用adduser時,發現切換至建立的使用者時登入shell不對(顯示為只有乙個$)這是因為新建立的使用者預設登入shell為/bin/sh,進入/etc/passwd將/bin/sh改為/bin/bash即可)
獲取口令檔案項:
struct passwd *
getpwuid(uid_t uid); //將i節點中的數值使用者id對映為使用者登入名
struct passwd *
getpwnam(const char *name);//使用者登入名
struct passwd *
getpwent(void);//返回口令檔案的下個記錄項,返回由他填好的password結構指標(get password entry)
void
setpwent(void);//反繞檔案,我的理解:從頭開始
void
endpwent(void);//關閉檔案(getpwent後呼叫)
陰影口令:
struct spwd *
getspnam(const char *name);
struct spwd *
getspent(void);
void
setspent(void);
void
endspent(void);
組檔案:
struct group中的gr_mem是乙個指標陣列,其中每個指標指向乙個屬於該組的使用者名稱,該陣列以空指標結尾。
struct group *
getgrgid(gid_t gid);//返回gid組的group結構
struct group *
getgrnam(const char *name);//返回name組的group結構
struct group *
getgrent(void);
void
setgrent(void);
void
endgrent(void);
附加組id:
乙個使用者可以參加多個專案,因此也就要同時屬於多個組。
int
getgroup(int gidsetsize, gid_t grouplist);//將各附加組id填寫到陣列grouplist中
int
setgroup(int ngroups, const gid_t grouplist);//設定附加組id
int
initgroups(const char *username, gid_t basegid);//在組檔案中找到username是成員的所有組,,並將引數basegid組識別碼加入此資料中。
一般情況,對於每個資料檔案至少有三個函式:
2、set:從相應檔案的起始處處理
3、end:關閉資料檔案
口令 -------------------------/etc/passwd 組
-------------------------/etc/group
陰影 -------------------------/etc/shadow
主機 -------------------------/etc/hosts
網路 -------------------------/etc/networks
協議 -------------------------/etc/protocols
服務 -------------------------/etc/services
int
uname(struct utsname *name);//返回當前主機和作業系統有關的資訊 (uname命令)
int
gethostname(char *name, int namelen);//獲取主機名(tcp/ip網路上主機名)(hostname命令)
time_t
time(time_t *calptr);//返回當前時間和日期
int
gettimeofday(struct timeval *restrict tp, void *restrict tzp);//tzp唯一合法值是null
struct tm *
gmtime(const time_t *calptr);//將日曆轉換成國際標準時間
struct tm *
localtime(const time_t *calptr);//將日曆轉換程本地時間
time_t
mktime(struct tm *tmptr);//以本地時間的年月日等作為引數,將其轉換成time_t值
char *
asctime( const struct tm *tmptr);//返回指向年月日等字串指標
char *
ctime(const time_t *calptr);//返回指向日曆時間的指標
size_t
strftime(char *restrict buf, size_t maxsize, const char *restrict format, const struct tm *restrict tmptr);
APUE筆記 系統資料檔案和資訊
passwd結構體 include 這個結構體的字段也就是 ect passwd中看到的字段 root x 0 0 root root bin bash bin x 1 1 bin bin sbin nologin daemon x 2 2 daemon sbin sbin nologin etc ...
06 APUE 系統資料檔案和資訊
a getpwent setpwent endpwent include struct passwd getpwent void 成功返回指標,出錯或到過檔案末尾返回 null void setpwent void void endpwent void struct passwd b getpwui...
APUE 第六章 系統資料檔案和資訊
口令檔案 struct passwd struct passwd getpwuid uid t uid 通過使用者id獲得相應的passwd結構 struct passwd getpwnam const char name 通過使用者名稱獲得相應的passwd結構 void setpwent 初始化...