读书之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小工具的梳理

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea 社区版 Database Navigator插件 列显示顺序错乱解决办法

idea 社区版 Database Navigator插件 列显示顺序错乱 影响:MyBatisCodeHelperPro插件生成代码字段顺序错乱 解决办法:将COLUMN 的排序方式由Name改为Position方式之后,reload即可!

base zhixi mode, redo example on local standyalone PC

ref url: https://modelscope.cn/models/ZJUNLP/DeepKE-LLM/summary Linux增大Swap分区,增加虚拟内存,以解决内存不足等问题_增大swapfile能缓解内存不足吗-CSDN博客 Add Local visual RAM 100G: ##增加虚拟内存 mkdir /data/VisualRAM cd VisualRAM…

第一次使用缓存,因为没预热,翻车了

△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 437 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) 预热一般指缓存预热,一般用在高并发系统中,为了提升系统在高并发情况下的稳定性的一种手段。…

使用fabric.js实现对图片涂鸦、文字编辑、平移缩放与保存功能

文章目录 背景1.初始化画布1.创建画布2.设置画布大小 2.渲染图片3.功能:开启涂鸦4.功能:添加文字5.旋转图片6.画布平移7.画布缩放8.保存图片9.上传图片10.销毁实例11.总结 背景 项目中有个需求,需要对图片附件进行简单的编辑操作&#xff0c…

实战AI大模型:构建和优化深度学习巨兽的关键技术【文末送书-15】

文章目录 前言一.模型设计1.1 硬件加速1.2 模型部署 二.模型深度和宽度的平衡2.1引入注意力机制2.1 残差连接 三.实战AI大模型【文末送书-15】3.1 粉丝福利:文末推荐与福利免费包邮送书! 前言 随着人工智能领域的迅猛发展,大规模深度学习模型…

《3D数学基础-图形和游戏开发》阅读笔记 | 3D数学基础 (学习中 1.5更新)

文章目录 3D数学基础矢量/向量概述 - 什么是向量单位矢量:只关注方向不关注大小 数学运算矢量的加法与减法减法的几何意义计算一个点到另一个点的位移矢量的点积与叉积 矩阵方阵几何意义 - 表示空间坐标的变换组合变换 矩阵的乘法变换的分类 矩阵的行列式 3D数学基础…

Linux第7步_设置虚拟机的电源

设置ubuntu代码下载源和关闭“自动检查更新”后,就要学习设置“虚拟机的电源”了。 用处不大,主要是了解”螺丝刀和扳手形状的图标“在哪里。 1、打开虚拟机,点击最右边的“下拉按钮”,弹出对话框,得到下图&#xff…

CEEMDAN +组合预测模型(CNN-Transformer + ARIMA)

往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测(一)数据集介绍和预处理-CSDN博客 风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客 风速预测&#xff…

栈的数据结构实验报告

一、实验目的: 1、理解栈的定义; 2、利用栈处理实际问题。 二、实验内容(实验题目与说明) 利用栈实现数据的分类,将输入的整数以奇偶为标准分别存放到两个栈中,并最终从栈1和栈2输出偶数和奇数序列。 …

【卡梅德生物】抗体人源化在肿瘤治疗中的应用

抗体人源化:创新癌症治疗新纪元 抗体人源化技术的崭新应用已在肿瘤治疗领域取得显著进展,为创造更有效、个体化的癌症治疗方案提供了新的可能性。抗体人源化在肿瘤治疗中的应用是生物技术领域一次重要的飞跃,为患者带来了更加安全和精准的治…

原来圣诞树可以这么做

先看结果 从上到下依次是: 2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7 ... 依次排下去,最后加4个单位数的数字 原来代码的世界里还有这个美。^V^

es相关介绍:yml配置、基础接口及方法介绍

下面是一个示例的 Easy-ES 的 YAML 配置文件: easy-es:enable: trueaddress: 192.168.1.145:9200username: your_usernamepassword: your_passwordconnectionTimeout: 5000socketTimeout: 60000maxRetryTimeout: 30000maxConnTotal: 30maxConnPerRoute: 10requestC…

python基于flask实现一个文本问答系统

from flask import Flask, render_template, requestapp Flask(__name__)# 一个简单的问题-答案映射,实际中可以使用更复杂的存储结构(数据库等) qa_pairs {"什么是人工智能?": "人工智能是模拟人类智能的一种机…

如何实现服务器主动向客户端推送实时数据

当需要实现服务器主动向客户端推送实时数据时,Server-Sent Events(SSE)是一种简单且有效的解决方案。本文将介绍如何使用Server-Sent Events,在后端使用Spring Boot实现,在前端使用Vue 3实现,并提供一个完整…

全志R128系统RTOS使用说明

使用串口访问设备 使用USB TypeC 连接线连接开发板 USB转串口 的接口,安装串口驱动程序:CH341SER.EXE 到设备管理器找到需要的串口,这里是 COM8 使用串口访问工具 PuTTY 打开串口,这里是 COM8,波特率 115200。 打开之后…

求海岸线-dfs

小莱获得了大奖:CM世界中一片 n m n \times m nm 的海域的使用权!这片海域可以看成 n m n \times m nm 的格子。其中每个格子要么是海,要么是岛屿,相邻的岛屿可以相互构成一片大的岛屿(相邻是指上下左右相连&#…

添加一个编辑的小功能(PHP的Laravel)

一个编辑的按钮可以弹出会话框修改断更天数 前台 加一个编辑按钮的样式,他的名字是固定好的 之前有人封装过直接用就好,但是一定放在class里面,不要放在id里面 看见不认识的方法一定要去看里面封装的是什么 之前就是没有看,所以…

CSS学习之-02

position:该属性指定了元素的定位类型 static:默认值,即没有定位,准寻正常的文档流对象,该定位不会受到top、bottom、left、right影响。 fixed:元素的位置相对于浏览器窗口是固定的,即使窗口滚…

吴恩达DeepLearning 2023学习目录

课程链接:https://space.bilibili.com/253734135/channel/collectiondetail?sid2022897 笔记下载:https://github.com/QueenJuliaZxx/deeplearning_ai_books L1 神经网络和深度学习 第一周 深度学习概论: 学习驱动神经网络兴起的主要技术趋…

如果PostgreSQL有两层nginx代理,会发生什么事?

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 1. 前言 PostgreSQL默认只能本机连接,若要在别的客户端远程连接pgsql,则需要修改配置文件pg_hba.conf&a…