手头有比较多的技术书籍,弃之可惜,放之惭愧,借助空闲时间,先草读,再demo整理。
unix环境高级编程 草读简单整理,为下一步整理细节技术点做准备。 (仅个人笔记)
demo0:ipc相关 管道,消息队列,信号量,共享存储,套接字。
未命名的管道,相关进程间使用。
demo1:管道相关接口 pipe 以及实现进程间通信,异常场景等。
demo2:使用管道实现一个分页显示文件的功能。 管道在中间进行数据临时存储,而不用创建临时文件,
demo3:使用管道实现 父子进程的互相通信。
demo4:popen和pclose的接口源码实现,以及该接口实现分页显示。
demo5:使用popen读取命令过滤大写转小写功能模块,实现回显在终端,注意行缓冲 fflush.
demo6:从标准输入中读取两个数的和,并回显在终端标准输出上。 STDIN_FIFENO 和read函数
demo7:使用多进程,管道的方式,驱动两数相加程序实现。 dup2 execl
demo8:使用底层io(read和write)和标准io(fgets 有缓冲区)的区别,以及上面管道使用有问题吗?
===》可以用setvbuf函数 设置fgets缓冲区,遇到换行立即处理。
命名管道 FIFO mkfifo,mkfifoat mknod和mknodat
demo9: tee指令的实现及了解。
demo10:使用FIFO和tee将一个流发送到两个不同的进程demo
demo11:多个客户端和服务端,FIFO通信。 每个客户端对应一个FIFO? 如何处理客户端断开场景?
xsi ip的三种机制 共享内存 消息队列 信号量
demo12: ftok函数 以及 msgget semget shmget创建ipc结构 msgctl semctl shmctl msgrcv msgsnd ipcrm
demo13:ipcs -l
demo14:分别使用相关接口实现对应的demo。
消息队列:内核中存储 可以是链表,数组等各种结构。
demo15:msgget,msgsnd,msgrcv创建,发送,接收消息。 struct msqid_ds结构体
demo16:消息队列,全双工管道,以及unix域套接字实现交互性能对比。
信号量:计数器,多个进程对共享数据的访问控制。
demo17:semget, semctl , struct semid_ds以及信号量的值,和操作系统对信号量的限制。
demo18:semop 信号量分配资源,以及进程终止时,对资源的释放。 exit时的信号做处理?
demo19:信号量,记录锁,互斥量几种方式的demo以及性能对比。
共享存储 一般和信号量配合使用。
demo20:shmget,shmctl, shmat, shmdt
demo21:打印进程中共享存储的位置,分析进程中存储区布局,共享存储区所在位置。 栈位置,堆位置,共享存储位置,未初始化数据,已经初始化数据位置等
demo22:如果相关进程之间的共享存储方案,可以用/dev/zero设备文件 配合mmap实现。 需要做同步处理。
demo23:mmap的匿名文件映射,创建了匿名存储区,关联进程可以访问。
posix信号量:更简单好用。
demo24:sem_open ,semclose,sem_unlink,sem_trywait,sem_wait,sem_timedwait,sem_post,sem_init,sem_destroy, sem_getvalue命名信号量和非命名信号量相关接口demo
demo25:对比上文xsi 信号量和posix信号量的区别,接口,性能,原理。
demo26:使用信号量代替锁实现demo。
demo27:进程间通信是,服务器进程和客户进程属性设置。 FIFO对应的stat或者fstat
demo0:了解socket接口对应的参数,套接字通信域,套接字类型,以及对应的协议。 (ip,ipv6,icmp,raw,tcp,udp)
===>除了常用的SOCK_DGRAM,SOCK_STREAM 还有SOCK_RAW,SOCK_SEQPACKET
demo1:梳理文件描述符可以使用套接字的相关函数。
demo2:shutdown,close,以及dup函数梳理
demo3:寻址设置,大小端字节序,tcp/ip协议规定了大端字节序。 htonl htons htohl htohs l代表主机,n代表网络,l代表长整型,s代表16位整型
demo4:不同的地址标识结构体,最终强转为sockaddr。 sockaddr_in sockaddr_in6
demo5:二进制和点分十进制转化 inet_ntop inet_pton
demo6:地址查询相关函数,以及原理。 gethostent getnetbyaddr getnetbyname getprotobyname 等等。。。
demo7:服务名和端口的映射 getservbyname getservbyport getaddrinfo gai_strerror
demo8:getaddrinfo的测试代码
demo9: bind getsockname getpeername
demo10: connect listen 以及连接请求队列大小
demo11:send函数以及第三个参数对应的相关标志。 sendto sendmsg recv recvfrom recvmsg
demo12:从服务器获取正常运行时间客户端代码,服务端代码
demo13:获取运行时间方式,用fopen和execl(dup2配合)两种方式,以及传递给服务器套接字方式
demo14:分别使用面向连接和非面向连接实现获取服务端运行时间方案。
demo15:套接字选项 setsockopt 和getsockopt 相关选项及含义。
demo16:tcp带外数据 fcntl(设置套接字所有权)和 sockatmask
demo17:套接字异步io fcntl ioctl及相关参数设置。
unix域套接字,同一台笔记本上不同进程间通信,支持流和数据报两种接口。
demo0:socketpair 创建无命名相互连接的unix域套接字,进行全双工通信demo,以及数据报和流的差异。
demo1:消息队列和域套接字配合实现消息轮询。
demo2:unix域套接字和消息队列使用的差异以及性能对比。
demo3:命名unix域套接字,绑定地址到unix域套接字上,以及一整套通信接口封装demo。 注意地址设置,文件权限等
demo4:传送文件 描述符,同一个打开的文件表项指针,实现消息的互通。
====》如何用unix域套接字交换文件描述符?
demo5:使用unix域套接字发送/接收进程的证书。
demo6:服务器进程demo 和客户进程如何通信的?
====》传递文件描述符 共享文件内容?
demo7:守护进程的open服务器进程demo。 select poll 守护进程
demo8:getopt函数
主要了解unix域套接字的各种使用,以及unix域套接字打开远程文件描述符实现共享!!!
demo0:内核终端驱动程序,输入队列和输出队列。 回显原理? 队列大小?刷新函数tcflush 以及termios.h, struct termios结构体
demo1:终端io相关函数 tcgetattr tcsetattr。。。
demo2:汇总终端输入特殊符号。
demo3:禁用终端字符,更改文件结束符。 isatty
demo4:终端属性设置demo tcgetattr tcsetattr 相关屏蔽字标志梳理。
demo5:stty -a命令 获取终端选项
demo6:波特率函数 cfgetispeed cfgetospeed cfsetispeed cfsetospeed 以及波特率在这里的影响。
demo7:行控制函数 tcdrain tcflow tcflush tcsendbreak
demo8:获取终端控制名ctermid 一般是/dev/tty isatty ttyname
demo9:ttyname函数的实现并测试。 搜索所有设备表项,寻找匹配项。
demo10:getpass函数的实现。 获取一个密码吗? 打开一个终端,设置控制终端模式,处理对应信号,缓冲区处理等细节。
demo11:规范模式(按行返回数据?)和非规范模式(数据量或者定时器?) cbreak模式和原始模式?
demo12:非规范模式 cbreak模式和原始模式的实现demo
demo13:终端窗口大小,struct winsize 和ioctl函数
demo14:termcap terminfo curses 终端操作和界面相关的库或标准。
伪终端设备驱动程序(终端设备)=》终端行规范=》在终端上进行处理。
demo0:伪终端的原理 伪终端主设备和从设备
demo1:telnetd和rlogind服务器,伪终端提供的网络登陆服务器。
demo2:窗口系统终端模拟。 termcap terminfo curses
demo3:script程序,expect程序
===》script
: 是一个命令行工具,用于记录终端会话的输入输出内容
===》expect
: 是一个脚本编程语言和工具,主要用于自动化交互式任务
demo4:观看终端运行显示,注意缓冲区,fflush
demo5:伪终端操作相关函数 posix_openpt grantpt unlockpt ptsname
demo6:ptym_open ptys_open pty_fork等函数的实现原理及demo
demo7:实现一个pty程序,了解pty的功能。
demo8:pty的远程模式 窗口大小变化 信号
主要就是了解终端设备驱动城区,终端行规范,对应接口,以及对应库的调用。
了解相关数据结构细节,需要研究代码源码,考虑算法,性能(锁粒度,影响锁的其他因素),并发。
demo0: dbm函数库和ndbm(一种简单的键值对数据库管理系统)
demo1:ndbm相关接口, db_open db_store db_fetch db_delete db_nextrec 索引文件和数据文件。
demo2:实际就是设计索引文件和数据文件的数据结构,存储方案和算法。 以及并发方式。
demo3:考虑锁的粒度 范围锁。
demo4:linux上构造静态库和动态库的方法。
demo5:相关函数对应的细节,需要用代码的形式整理。 数据结构 增删改查等
demo6:验证性能demo,单进程,多进程。
demo7:用户时间,系统时间,时钟的概念,以及获取对应值的方案。
demo0:打印机上的ipp服务器。 ipp建立在http之上。 了解其协议,接口。
demo1:http协议
demo2:linux上打印假脱机守护进程的模拟及测试。
demo3:源代码研究。 打印假脱机守护进程发送文件给打印机; 命令行程序将打印作业发给假脱机守护进程。
demo4:a2ps小工具的梳理
除此之外:相关课后习题关注。