Please enable JavaScript.
Coggle requires JavaScript to display documents.
UNIX环境高级编程 (线程控制 (同步属性 (进程共享, 互斥量类型), 线程创建 (pthread_create, pthread_once),…
UNIX环境高级编程
线程控制
线程创建
pthread_create, pthread_once
线程终止
pthread_exit, pthread_join, pthread_cancel, pthread_detach
线程标识
pthread_sekf, pthread_equal
线程同步
互斥锁,读写锁,条件变量
线程限制
线程属性
分离状态,线程栈,其他属性
同步属性
进程共享
互斥量类型
可重入与线程安全
ftrylockfile, flockfile, funlockfile
线程私有数据
取消选项
pthread_setcancelstate, pthread_setcanceltype
线程和信号
pthread_sigmask, sigwait, pthread_kill
线程和fork
线程和IO
API
attire, sync, control
使用注意:pthread cancel陷阱
文件和目录
文件系统
文件类型
S_ISREG, S_ISDIR, S_ISCHR, S_ISBLK, S_ISFIFO, S_ISLINK, S_ISSOCK
设置用户ID和设置组ID
文件访问权限
S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IROTH, S_IWOTH, S_IXOTH
access, umask, chmod/fchmod, chown/fchown/lchown
文件长度: st_size/st_blksize/st_blocks
文件链接: 硬链接/软链接
文件删除和重命名
unlink, remove, rmdir, rename
文件时间
最后访问时间,修改时间(write),更改时间(chmod,chown)
目录操作
opendir, readdir, rewinddir, closedir, telldir, seekdir
特殊设备文件
st_dev: major(but.st_dev), minor(but.st_dev)
inotify
监控:IN_ACCESS, IN_ATTRIB, IN_CLOSE_WRITE, IN_CLOSE_NOWRITE, IN_CREATE, IN_DELETE, IN_DELETE_SELF, IN_NODIFY, IN_MOVE_SELF, IN_MOVED_FROM, IN_MOVED_TO, IN_OPEN等
进程控制
开辟子进程 fork/vfork
_exit函数
进程标识符
getpid, getppid, getuid, getuid, getuigd, getegid
等待子进程结束
wait, waitpid
exec函数
execl, execv, execle, execve, execlp, execvp
更改用户ID和组ID
setuid, setgid, setreuid, setregid, seteuid, setegid
system函数
fork/exec, cmdstring, waitpid
解释器文件
" #!pathname [optional-arguments] "
用户标识
getlogin()
进程时间
tms_utime, tms_stime, tms_cutime, tms_cstime
Unix基础知识
输入和输出
file descriptor: stdin, stdout, stderr
程序和进程
process id: fork, exec, waitpid; thread id
错误处理
const char
strerror(int erratum); void perror(const char
msg);
文件和目录
home directory, working directory, pathname
stat, stat, lstat
用户标识
user id, group id, supplementary group id
登录
username, password, uid, gid, comment, home directory, shell
信号
interrupt key/quit key产生信号
系统调用和库函数
系统调用:内核态;库函数:用户态
时间值
wall clock time; user cpu time; sys cpu time
信号处理
中断的系统调用
可重入函数
不可靠信号
可靠信号
generation, delivery, pending, blocking, queue, delivery order, signal mask, sigset
常见信号
信号集
sigprocmask/sigpending, sigaction, sigsetjmp/siglongjmp, sigsuspend
信号概念
常用函数
signal, kill/raise, alarm/pause, abort, system等
进程环境
存储器分配
malloc, calloc, realloc
命令行参数和环境表
int main(int argc,char
argv[],char
envp[]);
C程序存储空间布局
| .text | .data | .bss | .heap(->) | zero block | (<-).stack | argv & environ |
非局部跳转
函数间的跳转:setjmp, longjmp
进程终止
资源限制
进程调度
进程启动
进程间通信
pipe
fifo: mkfifo
XSI IPC
权限结构
资源限制
创建标识
优点和缺点
消息队列
信号量
共享存储
mmap共享内存
进程pthread锁
系统数据文件和信息
组文件
gr_name, gr_passwd, gr_gid, gr_mem
其他数据文件
主机,网络,协议,服务
阴影文件
单向加密值,在etc/shadow
登录账户记录
utemp记录用户,wtmp跟踪登录和注销
口令文件
pw_name, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell
系统标识
utsname: sysname, nodename, release, version, machine
时间和日期例程 time_t
高级IO
IO多路转接
select/pselect
poll/ppoll
自动重启
异步IO
记录锁
接口
实现
readv/writev
非阻塞IO
存储映射IO
linux aio
io_setup, io_submit, io_getevents, io_destroy, io_cancel
标准IO
缓冲
标准错误不带缓冲,终端设备是行缓冲,其他都是全缓冲
打开和关闭流
打开:fopen, freopen, fdopen; 关闭:fclose
流和定向
管理的结构体:文件fd, 缓冲区指针,缓冲区长度,当前缓冲区读取长度,出错标志
读写流
字符IO: gets, fgetc, get char, ungetc, putc, fputc, putchar
行IO: fgets, gets, fputs, puts
二进制IO: fread, fwrite
格式化IO
定位流
fseek, fseeko, rewind, rewind
临时文件
接口:tmpnam, tmpfile, tempname, mktemp
进程关系
进程组
getpgrp, getpgid, setpgid
会话 setsid
登录过程
创建/etc/ttys => 创建init => exec getty => exec login => 更改目录 => chown终端权限 => setgid, initgroups => exec shell
控制终端
tcgetpgrp, tcsetpgrp, tcgetsid
作业控制
SIGTSTP,SIGSTOP,SIGTTIN,SIGTTOUT等
孤儿进程组
SIGHUP,SIGCONT
守护进程
出错处理
其他事项
daemonize
Unix标准化以及实现
Unix系统实现
限制:编译时限制,sysconf限制,pathconf/fpathconf限制
选项,功能测试宏,基本系统数据类型
Unix标准化
ISO C, IEEE POSIX, SUS, FIPS
文件IO
open/create, close, lseek, read, readahead, write, pread/pwrite, dup/dup2, sync/fsync/fdatasync, fcntl, ioctl, dev/fd/n, 底层实现