apue 第6章 系統數據文件和信息

 

在給出用戶登陸名或數值用戶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 }
getpwuid

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 }
getpwnam

 

也有些程序要查看整個口令文件。函數

#include <sys/types.h>
#include <pwd.h>

struct passwd *getpwent(void);
返回值:成功指針,出錯或達文件尾端,返回NULL
void setpwent(void);
void endpwent(void);

  apue例程ui

getpwent

 

有另外一組函數可用於訪問陰影口令文件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
相關文章
相關標籤/搜索