APUE: 系统相关的系统调用和库函数

本文主要总结和系统相关的文件和信息的系统调用和库函数。

#######################################################
系统相关的系统调用
#######################################################

#include
<sys/types.h>
#include
<unistd.h>
int getgroups(int size, gid_t list[]);
获取附加组ID,成功返回相应值,失败返回-1.
将附加组ID填写到数组list中,size为该数组中最多元素个数。
Size=0,函数返回附加组ID数。

#include <grp.h>
int setgroups(size_t size, const gid_t *list);
设置附加组ID表。

#include <sys/utsname.h>
int uname(struct utsname *buf);
成功返回非负,将信息填入结构,失败返回-1.

struct utsname {
    char sysname[]; // 操作系统名称
    char nodename[]; //节点名称
    char release[]; //操作系统发型版
    char version[]; //操作系统版本
    char machine[]; //硬件类型
#下面是可选
    char domainname[]
};

#include <unistd.h>
int gethostname(char *name, size_t len);
获取主机名,len限制name的长度,name返回主机名,成功返回0,失败返回-1.
int sethostname(const char *name, size_t len);
设置主机名。

#include <time.h>
time_t time(time_t   *t);
返回从19700101000000进过的秒数,如果t不是NULL也存放在t中。

#include <sys/time.h>
int gettimeofday(struct timeval *tp, void *tzp);
tzp必须等于NULL,获取从19700101000000进过的秒数和微妙数,存放在tp结构中。总是返回0.

struct timeval {
    time_t tv_sec;
    time_t tv_usec;
};

#######################################################
系统相关的库函数
#######################################################
#include <sys/types.h>
#include <pwd.h>
对/etc/passwd普通口令文件的操作。

struct passwd  *getpwnam(const char *name);
根据用户名返回结构指针,出错返回NULL。
struct passwd  *getpwuid(uid_t uid);
根据用户ID返回结构指针,出错返回NULL。

struct passwd *getpwent(void);
返回口令文件中下一个记录项,失败返回NULL。
void setpwent(void);
反绕有关文件,使它们定位到文件开始处。
void endpwent(void);
使用完要关闭这些文件。

struct passwd {
    char *pw_name;
    char *pw_passwd;
    uid_t pw_uid;
    gid_t pw_gid;
    char *pw_gecos;//用户信息
    char *pw_dir;//home路径
    char *pw_shell;//登陆的shell
};

#include <shadow.h>
对阴影口令文件/etc/shadow的操作

struct spwd *getspnam(const char *name);
根据名字返回结构指针,失败返回NULL。

struct spwd *getspent(void);
返回结构的指针,失败返回NULL。
void setspent(void);
反绕有关文件,使它们定位到文件开始处。
void endspent(void);
使用完要关闭这些文件。

struct spwd {
//下面两个是必须的
    char *sp_namp; //登录名
    char *sp_pwdp; //加密口令
//下面可选
    long sp_lstchg; //上次更改口令经过的时间
    long sp_min;  //经过多少天后允许更改
    long sp_max; //要求更改尚余天数
    long sp_warm; //到期警告天数
    long sp_inact; //账户不活动之前尚余天数
    long sp_expire; //账户到期天数
    unsigned long sp_flag; //保留
};

#include <sys/types.h>
#include <grp.h>
对组文件/etc/group的操作

struct group *getgrnam(const char *name);
根据组名返回结构指针,失败返回NULL。
struct group *getgrgid(gid_t gid);
根据组ID返回结构指针,失败返回NULL。

struct group *getgrent(void);
返回结构的指针,失败返回NULL。
void setgrent(void);
反绕有关文件,使它们定位到文件开始处。
void endgrent(void);
使用完要关闭这些文件。

struct group {
    char *gr_name; //组名
    char *gr_passwd; //组密码
    gid_t gr_gid; //组ID
    char **gr_mem; //组成员
};

#include <sys/types.h>
#include <grp.h>
int initgroups(const char *user, gid_t group);
实际调用setgroups函数为user用户设置附加组ID。

#include <time.h>
时间处理函数。

struct tm *gmtime(const time_t *timep);
传入从1970开始的日历时间timep,返回国际标准时间(UTC)结构的指针。
utc时间+8小时才是CST时间。
struct tm *localtime(const time_t *timep);
传入从1970开始的日历时间timep,返回本地时间(CST)结构指针。

time_t mktime(struct tm *tm);
将本地时间结构转换成1970开始的日历时间秒,返回日历时间秒数。

struct tm {
    int tm_sec;//0-60
    int tm_min;//0-59
    int tm_hour;//0-23,Beijing=utc+8
    int tm_mday;//1-31
    int tm_mon;//0-11,+1
    int tm_year;//+1900
    int tm_wday;//0-6,0=sunday
    int tm_yday;//0-365
    int tm_isdst;//>0(夏时制),<0(不用),=0(非夏时制)
};

char *ctime(const time_t *timep);
根据日历时间timep,返回本地时间字符串。

char *asctime(const struct tm *tm);
根据本地时间或国际时间结构,返回时间字符串。

size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
传入tm,格式化之后放入max大小的字符串s中。成功返回存入s中的字符数,否则返回0.

format:
%%:打印%
%c:输出日期和时间
%F:YYYY-MM-DD
…...

#define _XOPEN_SOURCE
char *strptime(const char *s, const char *format, struct tm *tm);

double difftime(time_t time1, time_t time0);

clock_t clock(void);
CLOCKS_PER_SEC

未完待续......
时间: 2024-08-08 17:52:08

APUE: 系统相关的系统调用和库函数的相关文章

APUE: 进程相关的系统调用和库函数

进程正常终止5种方式: 1.main函数返回 2.调用exit库函数 3.调用_exit或_Exit系统调用 4.最后一个线程从其启动例程返回 5.最后一个线程调用pthread_exit库函数 进程异常终止3种方式: 1.调用abort库函数,产生abort信号. 2.接到一个信号并终止 3.最后一个线程对取消请求做出响应 init进程:pid=1的进程,如果父进程先于子进程终止,子进程就被init进程收养. 孤儿进程:父进程先于子进程退出,子进程被init进程收养,这个子进程就是孤儿进程.

APUE: 信号相关系统调用和库函数

信号就是软件中断,信号提供一种处理异步事件的方法. 信号出现时按照下列方式处理: 1.忽略此信号,有两个信号不能忽略. 2.捕捉此信号,有两个信号不能被捕捉. 3.默认处理,少数默认处理是忽略,大部分默认处理是终止. ctrl+D组合键,不是信号,只是EOF字符 linux中1-31为普通信号:34-64为实时信号. trap-l 命令查看所有信号,64个 信号从1开始,没有0. SIGHUP:终端接口检测到连接断开发出该信号, SIGINT:ctrl+c,终端中断符,一般用来停止一个失去控制的

Linux系统编程——Linux系统调用

系统调用概述 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组"特殊"接口.用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件.关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等. 从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口--它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间. 系统服务之所以需要通过系统调

sockets: 套接字选项相关的系统调用

########################################################### 套接字选项相关的系统调用: ########################################################### 将optval指向的单元中的值设置给optname选项: int setsockopt(int sockfd, int level, int optname, const void *optval,socklen_t optlen)

linux-man命令中的编号含义(包括系统调用和库函数讲解)

博文说明[前言]: 本文将通过个人口吻介绍linux的man命令中的编号含义(包括系统调用和库函数解释),在目前时间点[2017年6月13号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 本文参考文献引用链接: 1.http://www.cnblogs.com/chao1118/p/3715523.html2.http://blog.csdn.net/high_high/artic

Linux - 系统调用与库函数

文件基本概念 文件 可被读写的对象 具备一定权属性,包括访问权限.类型等 文件系统 文件及其属性的集合,提供了命名及管理机制 文件结构 字节流,没有特定内部结构 文件类型 普通文件 目录 设备文件 字符文件/块文件 FIFO文件(如管道文件) Socket文件 符号链接 硬连接 不同的文件名对应同一个inode 不能跨越文件系统 相应系统调用 link() [root@localhost link]# ls -l total 1 -rw-r--r-- 1 root root 667 Oct 15

Python学习笔记--系统相关模块和操作

系统相关的信息模块: import sys sys.argv 是一个 list,包含所有的命令行参数. sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象. sys.stdin.readline() 从标准输入读一行 sys.stdout.write("a") 屏幕输出a sys.exit(exit_code) 退出程序 sys.modules 是一个dictionary,表示系统中所有可用的module sys.platform

系统相关命令

Linux 系统状态的查看及管理工具: pstree, ps, pidof,pgrep, top, htop, glance, pmap, vmstat, dstat, kill,pkill, job, bg, fg, nohup pstree pstree - display a tree of processes pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -g ] [ -u ][ -A | -G | -U ] [

使用kvm虚拟出Centos6.5系统相关步骤

使用kvm虚拟出Centos6.5系统相关步骤 kvm是啥东西,亲们自行百度哇,一两句话也说不清楚,直接进主题使用宿主机虚拟出一台centos6.5的系统,当然其他系统也可以的,考虑到企业常用服务器系统为centos6.5,特以此为例. 1.1 kvm安装必备条件 机器支持虚拟化,目前服务器应该都支持了,再不支持,服务器卖的出去?哈哈 友提:cpu是Intel公司生产显示为vmx,AMD公司生产的为svm. 1.2 安装kvm虚拟机 宿主机相关配置如下: 安装kvm: yum install q