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

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

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

15:进程间通信

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

16:网络IPC 套接字

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及相关参数设置。

17:高级进程间通信

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域套接字打开远程文件描述符实现共享!!!

18:终端IO

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 终端操作和界面相关的库或标准。

19:伪终端

伪终端设备驱动程序(终端设备)=》终端行规范=》在终端上进行处理。

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的远程模式 窗口大小变化 信号

主要就是了解终端设备驱动城区,终端行规范,对应接口,以及对应库的调用。

20:数据库函数库

了解相关数据结构细节,需要研究代码源码,考虑算法,性能(锁粒度,影响锁的其他因素),并发。

demo0: dbm函数库和ndbm(一种简单的键值对数据库管理系统)

demo1:ndbm相关接口, db_open db_store db_fetch db_delete db_nextrec 索引文件和数据文件。

demo2:实际就是设计索引文件和数据文件的数据结构,存储方案和算法。 以及并发方式。

demo3:考虑锁的粒度 范围锁。

demo4:linux上构造静态库和动态库的方法。

demo5:相关函数对应的细节,需要用代码的形式整理。 数据结构 增删改查等

demo6:验证性能demo,单进程,多进程。

demo7:用户时间,系统时间,时钟的概念,以及获取对应值的方案。

21:与网络打印机通信

demo0:打印机上的ipp服务器。 ipp建立在http之上。 了解其协议,接口。

demo1:http协议

demo2:linux上打印假脱机守护进程的模拟及测试。

demo3:源代码研究。 打印假脱机守护进程发送文件给打印机; 命令行程序将打印作业发给假脱机守护进程。

demo4:a2ps小工具的梳理

除此之外:相关课后习题关注。

你可能感兴趣的:(读书,unix,笔记,服务器)