UNIX环境高级编程读书笔记
文件I/O
基本的系统调用函数 open,create,close,lseek,read,write
以及原子性的pread,pwrite
复制文件描述符 dup
同步刷新fsync,fdatasync,sync
更改已经打开的文件属性 fcntl,杂物箱 ioctl
打开文件的内核数据结构,/dev/fd
文件类型
获取文件类型stat函数和stat结构体
测试文件是否打开,写入,执行政策 access
更改访问权限chmod,更改文件的用户和ID和组ID chown
文件截断truncate,硬链接link,删除目录unlink,remove
重命名rename,软链接symlink,打开符号链接readlink
更改文件的访问时间futimens,创建目录mkdir,删除空目录rmdir
更改当前工作目录chdir,读目录opendir
标准I/O
设置流重定向 fwide,设置缓冲区setbuf,全缓冲,行缓冲,不缓冲
fflush,fopen,fclose
一次读一个字节getc,fgetc,getchar
错误输出ferror,feor
将字符再送回流中ungetc
输出 putc,fputc,putchar
每次一行I/O fgets,gets,fputs,puts
执行二进制 fread,fwrite,定位标准I/O ftell,fseek,rewind,ftello,fseeko
格式化输出 printf,vprintf
格式化输入 scanf,vscanf
获取文件描述符 fileno,临时文件tmpnam,mkdtemp
创建内存流 fememopen
进程环境
退出函数exit,_Exit,_exit
注册退出的hook函数atexit
环境表int main(int argc, char *argv[], char *envp[])
动态内存分配malloc,calloc,realloc,free
获取环境变量getenv
设置环境变量putenv,setenv,unsetenv
跨函数的跳转setjmp,longjmp,jmp_buf结构体
设置获取资源限制 getrlimit,setrlimit,rlimit结构体
进程控制
返回进程标示符 getpid,getppid ,
getuid,geteuid,getgid,getegid
for,vfkor,clone
wait,waitpid,waitid,wait3,wait4
execve系列函数
设置实际用户ID和有效用户ID setuid,setgid
system-类似fork+exec,解释器文件
进程会计 acct结构体,获取用户登录名getlogin
nice,getpriority,setpriority
进程的系统CPU时间 times,tms结构体
进程关系
返回调用进程的进程组ID getpgrp,getpgid
创建新会话sesid,getsid,tcgetpgrp,tcsetpgrp,tcgetsid
终端登陆 execle("/bin/login", “login” “-p”, username, (char*)0, envp)
网络登陆 init->fork调用->inetd,inetd接受到客户端的telnet->fork调用
子进程exec启动telnetd处理用户逻辑
进程组是一个或多个进程的集合,会话是一个或多个进程组的集合
作业控制,前台进程,后台进程,pstree,孤儿进程组
信号
signal函数
kill,raise,alarm,pause,abort
信号集函数sigemptyset,sigfillset,sigaddset,sigdelset,sigismember
阻塞或屏蔽一组信号 sigprocmask
显示未决的信号集sigpending
sigaction函数,高级版
sigsetjmp,siglongjmp
sigsuspend
信号排队,不可靠的信号
sleep,nanosleep,
sigqueue 可以发送额外信息
和信号对应的字符串psignal
信号信息psiginfo
线程
pthread_equal,pthread_self
pthread_create(pthread_t,pthread_attr_t,*fun,*arg)
pthread_exit,pthread_join,pthread_cancel
注册清理函数 pthread_cleanup_push,pthread_cleanup_pop
pthread_detach
互斥量,pthread_mutex_t 结构体
pthread_mutex_init,pthread_mutex_destroy,pthread_mutex_lock,pthread_mutex_trylock
pthread_mutex_unlock,pthread_mutex_timedlock
读写锁,pthread_rwlock_t 结构体
pthread_rwlock_init,pthread_rwlock_destroy,pthread_rwlock_rdlock,pthread_rwlock_wrlock
pthread_rwlock_unlock,pthread_rwlock_tryrdlock,pthread_rwlock_trywrlock,pthread_rwlock_timerdlock,pthread_rwlock_timewrlock
条件变,pthread_cond_t 结构体
pthread_cond_init,pthread_cond_destroy,pthread_cond_wait,pthread_cond_timedwait
pthread_cond_signal,pthread_cond_broadcast
自旋锁,pthread_spinlock_t 结构体
pthread_spin_init,pthread_spin_destroy
pthread_spin_lock,pthread_spin_trylock,pthread_spin_unlock
屏障,pthread_barrier_t 结构体
pthread_barrier_init,pthread_barrier_destroy,pthread_barrier_wait
线程控制
线程属性
pthread_attr_t 结构体
pthread_attr_init,pthread_attr_destroy
分离属性 pthread_attr_getdetachstate,pthread_attr_setdetachstate
线程堆栈 pthread_attr_getstack,pthread_attr_setstack
线程栈大小 pthread_attr_getstacksize,pthread_attr_setstacksize
线程保护 pthread_attr_getguardsize,pthread_attr_setguardsize
互斥量属性
pthread_mutexattr_t 结构体
pthread_mutexattr_init,pthread_mutexattr_destroy
修改进程共享属性 pthread_mutexattr_getpshared,pthread_mutexattr_setpshared
修改和获取健壮的互斥量属性 pthread_mutexattr_getrobust,pthread_mutexattr_setrobust
指明与该互斥量相关的状态在互斥量解锁之前是一致的 pthread_mutex_consistent
修改和获取互斥量属性 pthread_mutexattr_gettype,pthread_mutexattr_settype
读写锁属性
pthread_rwlockattr_t 结构体
pthread_rwlockattr_init,phtread_rwlockattr_destroy
共享属性 pthread_rwlockattr_getpshared,pthraed_rwlockattr_setpshared
条件变量属性
pthread_condattr_t 结构体
pthread_condattr_init,pthread_condattr_destroy
共享属性 pthread_condattr_getpshared ,pthread_condattr_setpshared
时钟属性 pthread_condattr_getclock,pthread_condattr_setclock
屏障属性
pthread_barrierattr_t 结构体
pthread_barrierattr_init,pthread_barrierattr_destroy
共享属性 pthraed_barrierattr_getpshared ,pthread_barrierattr_setpshared
ftrylockfile,flockfile,funlockfile
线程私有
pthread_key_t 结构体,pthread_key_create,pthread_key_delete
pthread_once 解决条件竞争
pthread_setcancelstate,pthread_testcancel,pthread_setcanceltype
pthread_sigmask,sigwait,pthread_kill,pthread_atfork
守护进程
系统的各种守护进程
守护进程编写
1.调用umask将文件模式创建屏蔽字为0
2.fork,父进程退出
3.调用setsid创建新会话,称为进程组长
4.修改工作目录为根目录
5.关闭不需要的描述符
6.打开syslog
syslog函数
openlog,syslog,vsyslog,closelog
通过facility|level 实现优先级
高级 I/O
fcntl,文件锁(测试,获取,设置)
支持读锁,写锁,解锁
SEEK_SET:当前位置为文件的开头,新位置为偏移量的大小
SEEK_CUR:当前位置为文件指针的位置,新位置为当前位置加上偏移量
SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小
非阻塞I/O fcntl,O_NONBLOCK
多路复用
select(maxfdp1,read,write,except,timeval)
FD_ISSET,FD_CLR,FD_SET,FD_ZERO
poll(struct pollfd *fds, nfds_t nfds, timeout)
epoll_create
epoll_ctl(EPOLL_CTL_ADD,EPOLL_CTL_MOD,EPOLL_CTL_DEL)
epoll_event结构体
epoll_wait(int epfd, struct epoll_event *events,maxevents,timeout)
readv,writev
mmap,mprotect,msync,munmap
进程间通讯
pipe
popen,pclose
mkfifo,mknod
消息队列
msgget,msgsend,msgrcv,msgctl
信号量
semget,semop,semctl
sembuf 结构体,semun联合体
共享内存
shmget,shmat,shmdt,shmctl
思维导图
参考
文件IO
文件类型
标准I/O
系统数据文件和信息
进程环境
进程控制
进程关系
信号
线程
线程控制
守护进程
高级I/O
进程间通讯