在給出用戶登陸名或數值用戶ID後,這兩個函數就能查看相關項。shell
#include <sys/types.h> #include <pwd.h> struct passwd *getpwuid(uid_t uid); struct passwd *getpwnam(const char *name); 兩個函數返回值:成功返回指針,出錯返回NULL
uid:須要獲取信息的uid號
getpwuid例程數組
1 #include <pwd.h> 2 #include <sys/types.h> 3 #include <stdio.h> 4 5 int main() 6 { 7 uid_t my_uid; 8 9 struct passwd *my_info; 10 my_info = getpwuid(getuid()); 11 12 printf("my name = [%s]\n", my_info->pw_name); 13 printf("my passwd = [%s]\n", my_info->pw_passwd); 14 printf("my uid = [%d]\n", my_info->pw_uid); 15 printf("my gid = [%d]\n", my_info->pw_gid); 16 printf("my gecos = [%s]\n", my_info->pw_gecos); 17 printf("my dir = [%s]\n", my_info->pw_dir); 18 printf("my shell = [%s]\n", my_info->pw_shell); 19 20 return 0; 21 }
getpwnam例程ide
1 #include <pwd.h> 2 #include <sys/types.h> 3 #include <stdio.h> 4 5 int main() 6 { 7 char *username = "pi"; 8 struct passwd *my_info; 9 my_info = getpwnam(username); 10 if(!my_info) 11 { 12 perror("getpwnam error"); 13 exit(1); 14 } 15 16 printf("my name = [%s]\n", my_info->pw_name); 17 printf("my passwd = [%s]\n", my_info->pw_passwd); 18 printf("my uid = [%d]\n", my_info->pw_uid); 19 printf("my gid = [%d]\n", my_info->pw_gid); 20 printf("my gecos = [%s]\n", my_info->pw_gecos); 21 printf("my dir = [%s]\n", my_info->pw_dir); 22 printf("my shell = [%s]\n", my_info->pw_shell); 23 24 return 0; 25 }
也有些程序要查看整個口令文件。函數
#include <sys/types.h> #include <pwd.h> struct passwd *getpwent(void); 返回值:成功指針,出錯或達文件尾端,返回NULL void setpwent(void); void endpwent(void);
apue例程ui
有另外一組函數可用於訪問陰影口令文件spa
#include <shadow.h> struct spwd *getspnam(const char *name); struct spwd *getspent(void); 兩個函數返回值:成功返回指針,出錯NULL void setspent(void); vpid endspent(void);
查看組名或數值組ID操作系統
#include <sys/types.h> #include <grp.h> struct group *getgrgid(gid_t gid); struct group *getgrnam(const char *name); 返回值:成功指針,出錯NULL
針對口令文件的3個函數指針
#include <sys/types.h> #include <grp.h> struct group *getgrent(void); 返回值:成功指針,出錯或達到文件尾端,返回NULL void setgrent(void); void endgrent(void);
獲取和設置附屬組IDcode
#include <sys/types.h> #include <unistd.h> int getgroups(int size, gid_t list[]); 返回值:成功返回附屬組ID數量,出錯-1 #include <grp.h> int setgroups(size_t size, const gid_t *list); 兩個函數的返回值:成功0,出錯-1
返回與主機和操做系統有關的信息orm
#include <sys/utsname.h> int uname(struct utsname *buf); 返回值:成功非負值,出錯-1
返回主機名
#include <unistd.h> int gethostname(char *name, int namelen); 返回值:成功0,出錯-1
時間部分
time函數返回當前時間和日期
#include <time.h> time_t time(time_t *t); 返回值:成功返回時間值,出錯-1
把時間表示爲秒和納秒
#include <time.h> int clock_gettime(clockid_t clk_id, struct timespec *tp); 返回值:成功0,出錯-1
clock_getres函數把參數
#include <time.h> int clock_getres(clockid_t clk_id, struct timespec *res); 返回值:成功0,出錯-1
要對特定的時鐘設置時間,能夠調用clock_settime函數
#include <time.h> int clock_settime(clockid_t clk_id, const struct timespec *tp); 返回值:成功0,出錯-1
SUSv4指定gettimeofday已經棄用,然而一些程序仍然使用這個函數,由於與time相比,提供了更高的精度
#include <sys/time.h> int gettimeofday(struct timeval *tv, struct timezone *tz);
返回值:老是0
#include <time.h> struct tm *gmtime(const time_t *timep); struct tm *localtime(const time_t *timep); 返回值:指向分解的tm結構的指針,出錯NULL
localtime和gmtime之間的區別是,localtime是轉換成本地時間,gmtime是將時間結構分解成年月日時分秒週日。
以本地時間的年、月、日等做爲參數,將其變換成time_t值
#include <time.h> time_t mktime(struct tm *tm); 返回值:成功返回日曆時間,出錯-1
相似printf的時間值的函數,經過多個參數來定製產生的字符串
#include <time.h> size_t strftime(char s, size_t max, const char *format, const struct tm *tm); 返回值:如有空間,返回存入數組的字符數,不然返回0
字符串時間轉換成分解時間
#include <time.h> char *strptime(const char *s, const char *format, struct tm *tm); 返回值:指向上次解析的字符的下一個字符的指針,不然返回NULL