====系统环境====
#include <unistd.h>
pid_t getpid(void);
得到当前进程的进程ID号,永远成功
#include <stdlib.h>
char *getenv(const char *name);
得到给定环境变量名称的值,如果没有该变量,返回NULL值
#include <stdlib.h>
int putenv(char *string);
添加一个新的环境变量,传入的字符串格式为: "name=value"
传入的string会成为系统环境变量的一部分,也就是说,string不能是局部变量
或者是自动变量,错误返回-1值,添加成功返回0
#include <stdlib.h>
int setenv(const char *name, const char *value, int overwrite);
作用同上,不过比putenv更安全,该函数会在环境变量表分配空间,添加该
环境变量,如果overwrite非0,已有同名的环境变量会被覆盖,返回0表示
成功,-1表示错误
#include <stdlib.h>
int unsetenv(const char *name);
删除一个环境变量,返回0表示删除成功,-1表示删除失败,或者没有该环境变量
====内存分配====
#include <stdlib.h>
void *malloc(size_t size);
分配size大小的内存,并返回指向该内存的地址指针,返回NULL表示分配出错
#include <stdlib.h>
void free(void *ptr);
释放内存,同一指针不能释放两次,否则段错误
include <stdlib.h>
void *calloc(size_t numitems, size_t size);
分配并返回numitems个size大小的连续内存,并清空内存,字节全置
为0值,返回NULL表示分配出错
include <stdlib.h>
void *realloc(void *ptr, size_t size);
重新设置已经分配的ptr内存的大小为size,返回新的内存地址
指针,返回NULL表示出错
====用户和组====
/etc/passwd 用户密码文件
/etc/shadow 用户影子密码文件
/etc/group 用户分组信息文件
#include <pwd.h>
struct passwd *getpwnam(const char *name);
struct passwd *getpwuid(uid_t uid);
使用用户名或是用户ID号获取系统用户的账号信息, 成功都返回
一个指针,返回NULL表示出错,获取的信息来自/etc/passwd文件
#include <grp.h>
struct group *getgrnam(const char *name);
struct group *getgrgid(gid_t gid);
使用组名,或是组ID号获取系统用户组的信息,成功都返回一个
指针,返回NULL表示出错
#include <pwd.h>
struct passwd *getpwent(void);
void setpwent(void);
void endpwent(void);
getpwent从/etc/passwd文件中按序获取用户的信息,成功返回一个
指针,返回NULL表示获取完毕,需要循环调用该函数
getpwent获取完毕后,调用endpwent函数关闭清理资源
setpwent函数用来重置当前的用户信息为文件的第一条用户记录
#include <shadow.h>
struct spwd *getspnam(const char *name);
获取一个账户的shadow密码信息
struct spwd *getspent(void);
void setspent(void);
void endspent(void);
作用同getpwent函数系列,一个个获取账户的密码信息
#include <unistd.h>
uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid(void);
gid_t getegid(void);
获取账户的用户ID,组ID,有效用户ID,有效组ID
用户ID是指运行该程序的实际拥有者
组ID是指运行该程序的实际用户组
有效用户ID是指执行一定权限任务的用户ID
有效组ID是指执行一定权限任务的用户组ID
include <unistd.h>
int setuid(uid_t uid);
int setgid(gid_t gid);
设置用户ID/组ID,成功返回0,错误返回-1
#include <unistd.h>
int seteuid(uid_t euid);
int setegid(gid_t egid);
设置有效权限的用户ID/组ID,成功返回0,错误返回-1