struct passwd
{
char * pw_name; /* Username, POSIX.1 */
char * pw_passwd; /* Password */
__uid_t pw_uid; /* User ID, POSIX.1 */
__gid_t pw_gid; /* Group ID, POSIX.1 */
char * pw_gecos; /* Real Name or Comment field */
char * pw_dir; /* Home directory, POSIX.1 */
char * pw_shell; /* Shell Program, POSIX.1 */
};
#include <pwd.h>
srtuct passwd * getpwuid(__uid_t __uid)
struct passwd * getpwnam(const char *__name)
struct passwd * getpwent(void) // 从 /etc/passwd 读取一行
void endpwent(void) // 关闭文件
struct spwd
{
char *sp_namp; /* Login name */
char *sp_pwdp; /* Encrypted password */
long int sp_lstchg; /* Date of last change */
long int sp_min; /* Minimum number of days between changes */
long int sp_max; /* Maximum number of days between changes */
long int sp_warn; /* Number of days to warn user to change the password */
long int sp_inact; /* Number of days the account may be inactive */
long int sp_expire; /* Number of days since 1970-01-01 until account expires */
unsigned long int sp_flag; /* Reserved */
};
#include <shadow.h>
//要用管理员权限运行,否则会出错
struct spwd * getspnam(const char *__name)
struct spwd * getspent(void)
struct group
{
char *gr_name; /* Group name */
char *gr_passwd; /* password */
__gid_t gr_gid; /* Group ID */
char **gr_mem; /* Member list */
}
#include <grp.h>
struct group * getgrgid(__gid_t __gid)
struct group * getgrnam(const char *__name)
struct group * getgrent() // 从 /etc/group/ 读取一行
void endgrent(void ) // 关闭文件
#include <unistd.h>
int getgroups(int __size, __gid_t *__list) // 获取程序所属用户的附属组数,size 为 0 时不修改 list 的内容
#include <grp.h>
int setgroups(size_t __n, const __gid_t *__groups)
int initgroups(const char *__user, __gid_t __group)
/*
/etc/passed 口令
/etc/group 组
/etc/shadow 阴影 【??】
/etc/hosts 主机
/etc/networks 网络
/etc/protocols 协议
/etc/services 服务
P149
*/
#include <sys/utsname.h>
int uname(struct utsname *__name)
struct utsname{
char sysname[_UTSNAME_SYSNAME_LENGTH];//当前操作系统名
char nodename[_UTSNAME_NODENAME_LENGTH];//网络上的名称
char release[_UTSNAME_RELEASE_LENGTH];//当前发布级别
char version[_UTSNAME_VERSION_LENGTH];//当前发布版本
char machine[_UTSNAME_MACHINE_LENGTH];//当前硬件体系类型
}
#include <unistd.h>
int gethostname(char *__name, size_t __len) // 网络中的主机名
#include <time.h>
time_t time(time_t *__timer) // 结果在返回值和参数里
#include <sys/time.h>
int clock_gettime(clockid_t __clock_id, struct timespec *__tp)
// CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,
// CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
// CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
// CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
int clock_getres(clockid_t __clock_id, struct timespec *__res) // 获取时间精度
int clock_settime(clockid_t __clock_id, const struct timespec *__tp)
struct tm {
int tm_sec; /* 秒 – 取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour; /* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
};
#include <time.h>
struct tm * gmtime(const time_t *__timer) //UTC时间
struct tm * localtime(const time_t *__timer) //本地时间
time_t mktime(struct tm *__tp) // tm 与 time_t 的转换
size_t strftime(char *__restrict __s, size_t __maxsize, const char *__restrict __format, const struct tm *__restrict __tp) // 返回存入数组的字符数
char * strptime(const char *__restrict __s, const char *__restrict __fmt, struct tm *__tp) // 返回指向上次解析的字符的下一个字符的指针,错误为 NULL P156
//例子 P154
time_t t = time(nullptr);
struct tm * tmp = localtime(&t);
char buf[16];
if ( strftime(buf,16,"%r ",tmp) == 0 )
cout<<"error"<<endl;
else
cout<<buf<<endl;