读书之unix环境高级编程_简单笔记1(初步)

手头有比较多的技术书籍,弃之可惜,放之惭愧,借助空闲时间,先草读,再demo整理。

unix环境高级编程 草读简单整理,为下一步整理细节技术点做准备(仅个人笔记)。

基本的文件操作,线程,进程,系统,进程间通信,终端控制等

1:文件和目录

demo1 :实现ls的功能,列出所有的目录文件 opendir

demo2:从标准输入读,向标准输出写。 > < read write getc putc

demo3:获取进程id gitpid() 组id 线程id /etc/group

demo4:多进程,从标准输入读入指令并执行。 专门进程执行 execlp

demo5: strerror和perror 打印错误字符串

demo6:捕获终止信号,并做相关处理

demo7:time -p指令 测量指令消耗时长

demo8:printf底层调用write系统调用?

demo9:malloc和sbrk系统调用

2:unix标准和实现

demo1:了解unix相关基础头文件。

demo2:limits中的相关限制 (ISO C和POSIX限制)

demo3:sysconf,pathconf,fpathconf函数使用 获取相关系统参数,比如 返回页面大小,打开文件描述符等。

​ 为路径名动态分配空间,确定描述符的个数。

demo4:基本系统数据类型

3:文件IO

demo1:open,create,lseek

demo2:read,write 从标准输入复制到标准输出 缓冲区大小对性能的影响 开启同步写通过fcntl

demo3:文件共享 内核处理文件打开的结构体及存储方式。 v-node节点 多进程打开同一个文件的影响

demo4:原子操作 相关的函数 pread 和pwrite dup和dup2(原子操作)

demo5:延迟写 sync fsync fdatasync

demo6:fcntl 改变打开文件属性 整理该接口。 对文件描述符设置属性进行操作demo

demo7:预了解ioctl函数

demo8:/dev/fd/ 0 1 2 和/dev/stdin stdout stderr等相关

4:文件和目录

demo0:获取文件或者目录状态信息 stat fstat lstat fstatat 结构体stat 中存储文件类型等相关信息 其中st_mode中相关必要信息 用户用户组信息,文件访问权限 所有权等。

demo1:权限测试 access 和faccessat 测试文件的访问权限,是否有权限

demo3:umask 可以设置用户的访问权限,对文件。 类似于open和create时的参数 也是一个指令。

demo4:代码中chmod fchmod fchmodat 改权限。

demo5:chown fchown fchownat lchown 改文件的用户id和组id

demo6:空洞文件的查看 ls -l指令和du -s查看占用块大小 wc -c 查看实际字符数 设置环境变量可以改变du代表的块大小,默认512字。

demo7:文件截断 truncate ftruncate 以及打开文件时 O_TRUNC 修改文件大小?

demo8:文件系统,从分区到i节点。

demo9:链接文件 link linkat unlink unlinkat remove 以及df指令查看权限。

demo10:文件和目录的重命名 rename 和 renameat

demo11:符号链接和硬链接的区别? 符号链接用cat无效 syslink syslinkat readlink readlinkat

demo12:文件的时间 st_atim st_mtim st_ctim 以及那些操作函数会对其有影响。

​ 修改访问时间,futimens utimensat utimes

demo13:创建删除目录 mkdir mkdirat rmdir ext2 ext3 ext4 和mount命令

demo14:读目录 opendir fdopendir readdir rewinddir closedir telldir seekdir 递归遍历目录 按类型计数demo

demo15:更改当前工作目录chdir,fchdir 以及底层原理 getcwd获取完整绝对路径

demo16:设备特殊文件,主,次设备号 major minor 的demo

demo17:文件访问权限位整理总结。

5:标准IO库 操作文件流

demo0:fwide设置流的定向,flush刷新缓冲,setbuf,setvbuf打开或者关闭缓冲机制 设置使用自己的缓冲区,fflush,

demo1:流操作,fopen,freopen,fdopen,fclose,

===》getc,fgetc,getchar ferror feof clearerr ungetc(压回流中) putc fputc putchar

demo2:fgets gets fputs puts行操作 fread fwrite二进制io操作

demo3:定位流 ftell fseek rewind ftello fseeko fgetpos fsetpos

demo4:格式化io printf fprintf dprintf sprintf snprintf vprintf vfprintf vdprintf vsprintf vsnprintf

demo5: scanf fscanf sscanf vscanf vfscanf vsscanf fileno(获取文件流的描述符)

demo6:对各个标准io流打印缓冲状态信息

demo7:临时文件 tmpnam生成文件名 tmpfile创建临时文件 mkdtemp mkstemp 创建唯一临时目录 文件

demo9:setbuf,setvbuf设置使用自己的缓冲区, fmemopen创建文件流对象,与内存缓冲区关联,像操作文件一样操作缓冲区。

===》open_memstream open_wmemstream 创建流面向字节,宽字节

6:系统数据文件和信息 /etc下文件信息 时间相关函数

demo0:了解 /etc/passwd和/etc/group 了解finger指令

demo1:getpwuid getpwnam getpwent setpwent endpwent 获取口令相关,如用户id对应的用户名和家目录

demo2:getspnam getspent setspent endspent 阴影口令 获取阴影密码文件中的信息 注意不同操作系统下阴影口令文件位置

demo3:组文件 getgrgid getgrnam getgrent setgrent endgrent

demo4:附属组 getgroups setgroups initgroups

demo5:其他数据文件及操作 /etc/services /etc/networks /etc/hosts /etc/protocols

demo6:系统标识 uname gethostname

demo7:时间和日期 time clock_gettime clock_getres clock_settime gettimeofday(已弃用但精度更高)

===》gmtime localtime mktime strftime strftime_l

7:进程环境

demo0: exit _Exit _exit 终止进程 atexit(注册终止时执行的函数) 命令行参数main函数获取

demo1:环境表 extern char **environ获取信息, 存储空间安排(正文,初始化,未初始化,堆,栈)

demo2:共享库的了解。 malloc calloc realloc 以及sbrk的关系,字节对齐。

====》相关库 libmalloc vmalloc quick-fit jemalloc TCMalloc alloca

demo3:环境变量 getenv putenv setenv unsetenv

demo4:函数setjmp和longjmp ===>goto

demo5:自动变量,寄存器变量,易失变量的测试demo

demo6:进程资源限制 getrlimit setrlimit 打印当前进程资源demo,比如当前进程的CPU时间限制

8:进程控制

demo0:id为0的进程 以及init进程 id为2页守护进程

demo1:getpid getppid getuid geteuid getgid getegid fork以及写时复制 相关内容的共享 vfork 不将父进程的地址空间完全复制到子进程

demo2:进程的exit以及异常退出等。

demo3:wait 和waitpid waitid wait3 wait4

demo4:子进程和父进程的竞态

demo5:子进程一般调用exec执行新程序 execl execv execle execve execlp execvp fexecve

demo6:setuid和setgid 用户和组id setreuid setregid seteuid setegid

demo7:解释器文件 类似于shell文件 用execl调用测试 awk指令

demo8:system函数的内部原理以及使用 实际是创建进程 调用execl 以及对信号等的完善处理 system函数demo

demo9:进程会计 记录进程命名 CPU时间 用户id 组id等必要信息 终止时的信息

===》文件内容查看信息以及通过结构打印(读进程会计文件) sa, ac, lastcomm, accton等

demo10:getpwuid(getuid()) getlogin()

demo11:进程调度,优先级相关 nice getpriority setpriority demo了解其对进程调度的影响

demo12:进程时间 times 获取进程时间demo

9:进程关系

demo0:/etc/ttys telnet网络登陆

demo1:进程组 getpgrp getpgid setpgid

demo2:session会话 getsid setsid 以及控制终端 session的结构体信息

demo3:前台进程组 tcgetpgrp tcsetpgrp tcgetsid 获取会话首进程的进程组id

demo4:pr指令 作业控制,以及相关信号 前台进程,后台进程以及相关信号控制进程。

demo5:crypt 指令 ps -o指令

demo6:孤儿进程,孤儿进程组。

demo7:session的结构体信息

10:信号

demo0:信号相关头文件 signal.h 梳理相关系统信号

demo1:signal函数 处理信号,捕获信号,忽略信号?

demo2:有些函数底层,可以被信号中断。 如read等

demo3:可重入函数 以及 信号处理函数中调用不可重入函数(全局或者静态变量)。

demo4:SIGCLD信号的含义 以及demo处理

demo5:可靠信号和不可靠信号 进程对应的信号屏蔽字

demo6:kill函数和 raise函数 处理信号

demo7:alarm 超时产生信号 pause 挂起直到捕获信号

demo8:结合信号 实现sleep的功能,带时间限制的read

demo9:处理多个信号,信号集 sigemptyset sigfillset sigaddset sigdelset sigismember

demo10:进程信号屏蔽字 sigprocmask sigpending

demo11:sigaction 检查和修改信号和信号对应的执行函数

demo12:自实现signal函数 以及对应的函数返回值梳理。

demo13:sigsetjmp siglongjmp 实现系统屏蔽的信号字调用。

demo14:sigsuspend 原子操作恢复信号屏蔽字,使进程休眠。 信号屏蔽恢复成之前旧值

demo15:利用信号实现父子进程之间的同步。

demo16:函数abort的底层并实现。

demo17:函数system调用ed编辑器,并捕获信号。

demo18:利用信号实现可靠的 sleep nanosleep clock_nanosleep

demo19:信号队列的支持 sigqueue

demo20:作业控制信号 等必要信号的梳理和处理 如SIGTSTP信号的处理

demo21:信号名和编号 psignal psiginfo strsignal sig2str str2sig 打印出来demo

11:线程

demo0:进程可以看成是一个控制线程,线程标识pthread_t

demo1:pthread_equal pthread_self pthread_create 创建线程,打印线程id,比较线程id

demo2:pthread_exit pthread_join 线程终止

demo3:pthread_cancel 取消线程 pthread_cleanup_push pthread_cleanup_pop 线程清理处理程序 pthread_cancel_push pthread_detach

demo4:线程同步互斥量: pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_trylock pthread_mutex_unlock

====》demo 实现一个结构 访问 多个互斥量,避免死锁demo

demo5:pthread_mutex_timedlock 不建议使用,会有诡异死锁 比如多个线程用这个函数获取锁

demo6:读写锁 pthread_rwlock_init pthread_rwlock_destroy pthread_rwlock_rdlock pthread_rwlock_wrlock pthread_rwlock_unlock

====》pthread_rwlock_tryrdlock pthread_rwlock_trywrlock 搜索频率高与操作频率时使用读写锁。

====》pthread_rwlock_timedrdlock pthread_rwlock_timedwrlock 带超时的读写锁

demo7:条件变量 无竞争方式等待特定条件发生 与互斥量一起使用

====》pthread_cond_t pthread_cond_init pthread_cond_destroy PTHREAD_COND_INITIALIZER

====》pthread_cond_wait pthread_cond_timedwait 以及内部超时时间的获取?

====》pthread_cond_signal pthread_cond_broadcast 发信号

demo8:自旋锁忙等 pthread_spin_init pthread_spin_destroy

====》pthread_spin_lock pthread_spin_trylock pthread_spin_unlock

demo9:屏障 类似于pthread_join 一组线程都在某个点上等待,所有都到达才执行。

====》pthread_barrier_init pthread_barrier_destory pthread_barrier_wait

====》多个线程使用屏蔽进行同步demo (堆算法对大数据排序时使用,使用多线程分解,然后合并)

12:线程控制

demo0:线程限制 用sysconf进行获取相关限制

demo1:线程属性 pthread_attr_init pthread_attr_destroy pthread_detach设置退出时回收资源?

demo2:pthread_attr_getdetachstate pthread_attr_setdetachstate

demo3:pthread_attr_getstack pthread_attr_setstack 设置线程的虚拟内存

demo4:pthread_attr_getstacksize pthread_attr_setstacksize pthread_attr_getguardsize pthread_attr_setguardsize 线程属性对象的大小 线程属性对象中保护区的大小

demo5:线程互斥属性 pthread_mutexattr_init pthread_mutexattr_destory pthread_mutexattr_getpshared pthread_mutexattr_setpshared 共享属性?

====》多个线程访问同一个同步对象 共享属性?

====》pthread_mutexattr_getrobust pthread_mutexattr_setrobust 健壮的互斥量属性 鲁棒性?

====》pthread_mutex_consistent 让互斥量能正常使用

====》pthread_mutexattr_gettype pthread_mutexattr_settype 得到互斥量属性

======》汇总demo 使用递归互斥量demo

demo6:读写锁属性 pthread_rwlockattr_init pthread_rwlockattr_destroy

====》 pthread_rwlockattr_getpshared pthread_rwlockattr_setpshared 进程共享属性

====》pthread_condattr_init pthread_condattr_destroy 条件变量属性 pthread_condattr_getpshared pthread_condattr_setpshared pthread_condattr_getclock pthread_condattr_setclock

====》pthread_barrierattr_init pthread_barrierattr_destroy 屏障属性 pthread_barrierattr_getpshared pthread_barrierattr_setpshared

demo7:重入,线程安全和不保证线程安全的函数

====》管理文件对象FILE的方法 ftrylockfile flockfile funlockfile getchar_unlocked getc_unlocked putchar_unlocked putc_unlocked

====》getenv的可重入和不可重入以及安全版本 demo

demo8:线程特定数据,私有数据

====》pthread_key_create pthread_key_delete pthread_once

====》pthread_getspecific pthread_setspecific

====》取消 pthread_setcancelstate pthread_testcancel pthread_setcanceltype

demo9:线程和信号 线程信号屏蔽字

====》pthread_sigmask sigwait pthread_kill 线程中同步信号处理

demo10:pthread_atfork 和fork 处理fork后锁的问题

demo11:多线程并发操作文件 用pread pwrite

13:守护进程

demo0: ps -efj 查看相关父进程细节。 以及操作系统必要的守护进程。 inetd cron

demo1:创建一个守护进程 umask fork setsid 等创建一个孤儿进程。

demo2:守护进程的日志记录 syslogd 的相关函数 openlog syslog closelog setlogmask vsyslog

demo3:文件和记录锁 实现单实例守护进程

demo4:守护进程的一些管理 锁文件/etc/run/ 配置文件/etc/下 命令行启动,初始化脚本/etc/rc* /etc/init.d/* /etc/inittab

====》以及通过捕获信号 重新读取配置文件

====》守护进程重读配置文件的demo。 多线程 单线程

demo5:守护进程以及服务器,客户端进程模型

14:高级IO

非阻塞io,记录锁,io多路转接(select,poll),异步io,readv,writev,内存映射mmap

demo0:设置非阻塞io,从标准输入读多个字符,回显到标准输出,理解非阻塞。

demo1:文件字节范围锁(记录锁),同时操作同一个文件。 fcntl 以及struct flock(相关标志,读写锁)

demo2:文件区域加锁和解锁的demo。

demo3:模拟这种场景下的死锁。

demo4:锁的继承练习,fork子进程。

demo5:给整个文件加锁,文件末尾加锁。

demo6:建议性锁(共享锁,读锁)和强制性锁(写锁,其他进程也无法读锁吗?)对其他进程的影响。

demo7:强制性锁的练习。

demo8:思考:多人同时编辑同一文件,强制性锁在这里的意义?

demo9: telnet和telnetd服务的原理,这里如何实现一个telnet命令逻辑。(异步IO, 单独的信号触发, IO多路复用)

demo10:select和pselect的io多路复用的demo。 超时时间参数,秒和纳秒的梳理。

demo11:poll进行io多路复用接口和相关原理demo。

demo12:select和poll的可中断。 SA_RESTART 信号

demo13:异步io通过信号实现demo。

demo14:异步IO: ioctl (system) , SIGIO和SIGURG(BSD), aio模块(POSIX)。

demo15:梳理aio模块相关接口demo,翻译一个文件的异步IO实例

demo16:散布读和聚集写 readv和 writev 读,写多个非连续缓冲区

demo17:自定义实现readn和writen 读,写指定的n个字节。

demo18:存储映射IO mmap,映射文件大小与虚拟存储页大小关系,信号sigegv和sigsegv

demo19:子进程继承父进程的映射区 mprotect修改映射权限

demo20:msync (存储映射区) munmap(解除映射)

demo21:用mmap实现复制文件,考虑大文件,以及内存的限制。 以及调用msync的时机。

demo22:直接用read和write复制文件,与用mmap复制文件的效率对比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值