第六章 系統資料檔案和資訊

2021-06-26 05:46:22 字數 2871 閱讀 8778

6.2 口令檔案

和口令檔案對應的字段包含在的結構體passwd中。

#include

struct passwd * getpwuid(uid_t uid);

struct passwd * getpwnam(const char * name); //兩個函式的返回值:若成功則返回指標,若出錯則返回null

如果要檢視的只是登入名或使用者id,那麼這兩個posix.1函式能滿足要求,但是也有些程式要檢視整個口令檔案。下列三個函式則可用於此種目的:

#include

struct passwd* getpwent(void); 返回值:若成功則返回指標,若出錯或達到檔案結尾則返回null

void setpwent(void);

void endpwent(void);

#include #include #include struct passwd *  getpwnam(const char *name)
6.3 陰影口令

#include 

struct spwd* getspnam(const char * name); 

struct spwd* getspent(void);

兩個函式返回值:若成功則返回指標,若出錯則返回null

void setspent(void);

void endspent(void);

6.4組檔案

unix組檔案,這些字段包含在中所定義的group結構中。

#include

struct group * getgrgid(gid_t gid);

struct group * getgrnam(congst char * name);

兩個函式返回值:若成功則返回指標 若出錯則返回null

#include

struct group * getgrent(void); 返回值:若成功則返回指標,若出錯或到達檔案結尾則返回null

void setgrent(void);

void endgrent(void);

6.5 附加組id

#include < unistd.h>

int getgroups(int gidsetsize,gid_t grouplist);  返回值:若成功則返回附加組id數, 若出錯則返回-1

#include

#include

int setgroups(int ngroups, const gid_t grouplist);

#include

#include

int  initgroups(const char * username,gid_t basegid);

兩個函式返回值:若成功則返回0 錯出錯則返回-1

6.8  登入帳號記錄

大多數unix系統都提供下來連個資料檔案:utmp檔案,它記錄當前登入進系統的各個使用者;

wtmp檔案,它跟蹤各個登入和登出事件

struct utmp

登入時 login程式填寫此型別結構,然後將其寫入到utmp檔案中,同時也將其添寫到wtmp檔案中。

登出時 init程序將utmp檔案中相應的記錄擦除,並將乙個新紀錄添寫到wtmp檔案中。

who(1)程式讀utmp檔案,並以可讀格式列印其內容。

後來unix提供了last命令,它讀wtmp檔案並列印所選擇的記錄。

6.9 系統標識

#include < sys/utsname.h>

int uname(struct utsname * name); //返回值:若成功則返回非負值,若出錯則返回-1

struct utsname;

#incluce

int gethostname(char * name , int namelen); //返回值:若成功則返回0 若出錯則返回-1

6.10 時間和日期例程

time_t time(time_t * calptr); //返回值:若成功則返回時間值,若出錯則返回-1

time_t自國際標準時間公元2023年1月1日00:00:00以來經過的秒數。這種秒數是以資料型別time_t表示的。我們稱它為日曆時間。麗日時間包括時間和日期。

gettimeofday提供了更高的解析度

#include

int gettimeofday(struct timeval * restrict tp, void * restrict tzp);

struct timeval

#include

struct tm * gmtime(const time_t * calptr);

struct tm * localtime(const time_t * calptr); //兩個函式返回值:指向tm結構的指標

區別:localtime將日曆時間轉換成本地時間(考慮到本地時區和夏時制標誌) 而gmtime則將日曆轉換成國際標準時間為年,月 日 時 分 秒 週日

#include

time_t mktime(struct tm* tmptr); 返回值:若成功則返回日曆事件, 若出錯則返回-1

#include

char * asctime(const struct tm* tmptr);

char * ctime(const time_t calptr); 連個函式的返回值:指向以null結尾的字串的指標

#include

size_t strftime(char * restrict buf, size_t maxsize,const char * restrict format, const sturct tm * restrict tmprt);

返回值:若有空間則返回存入陣列的字元數,否則返回0

APUE 第六章 系統資料檔案和資訊

口令檔案 struct passwd struct passwd getpwuid uid t uid 通過使用者id獲得相應的passwd結構 struct passwd getpwnam const char name 通過使用者名稱獲得相應的passwd結構 void setpwent 初始化...

APUE筆記 第六章 系統資料檔案和資訊

功能 訪問口令檔案中資訊。功能 檢視整個口令檔案。功能 檢視組名或數值組id。功能 搜尋整個組檔案,則須使用另外幾個函式。這三個函式類似於針對口令檔案的三個函式。功能 訪問和設定新增組id。功能 返回與主機和作業系統有關的資訊。兩個函式localtime和gmtime將日曆時間變換成以年 月 日 時...

單刷APUE系列 第六章 系統資料檔案和資訊

使用過unix系統的朋友應該知道 etc passwd檔案,這就是unix系統口令檔案,在posix1.x規範中規定unix系統必須存在使用者資料庫,這些使用者資料庫裡每個使用者都需要包含一些字段,具體需要檢視標頭檔案。struct passwd 複製 在很多unix系統中,passwd是乙個asc...