unix网络编程读书笔记doc.docx

上传人:b****5 文档编号:3029623 上传时间:2022-11-17 格式:DOCX 页数:9 大小:20.58KB
下载 相关 举报
unix网络编程读书笔记doc.docx_第1页
第1页 / 共9页
unix网络编程读书笔记doc.docx_第2页
第2页 / 共9页
unix网络编程读书笔记doc.docx_第3页
第3页 / 共9页
unix网络编程读书笔记doc.docx_第4页
第4页 / 共9页
unix网络编程读书笔记doc.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

unix网络编程读书笔记doc.docx

《unix网络编程读书笔记doc.docx》由会员分享,可在线阅读,更多相关《unix网络编程读书笔记doc.docx(9页珍藏版)》请在冰豆网上搜索。

unix网络编程读书笔记doc.docx

unix网络编程读书笔记doc

unix网络编程读书笔记

篇一:

Linux网络编程读书笔记

LINUX网络编程的读书笔记

笔记是该书内容的精简,适当之处加上我个人的观点。

联系:

zhangyv163@笔记整理:

ZhangYv日期:

2005-1-15

书名:

Linux网络编程作者:

林宇郭凌云出版社:

人民邮电

难度:

入门到进阶

第一章文件系统和进程系统

1.1文件系统的总体结构

从文件系统的实现角度来看,按层次可以分成应用程序、系统调用、文件子系统、高速缓冲、设备驱动和具体的存储设备等几个层次,如下图:

在UNIX系统中,程序不管核心按照什么样的格式来组织文件,只是把文件看作一个无格式的字节流来看待。

对文件的存取语法是由系统定义的,数据的语义是由程序加上去的。

应用进程通过系统调用来访问文件系统,分配给应用程序一个标准的通用接口,便于屏蔽不同文件系统的差异。

文件系统不能直接访问硬件设备,通过调用设备驱动进程来操作具体设备。

对高速设备的访问,通常通过高速缓冲机制来提高设备和内存的数据交换。

设备驱动进程用来屏蔽不同物理设备的操作差异。

文件系统的总体结构是:

引导块、超级块、索引节点表,数据区。

·引导块在文件系统的最前面,它和操作系统引导有关。

有且只有一个引导块有效。

·超级块也叫管理块,存放文件系统的管理信息,如文件系统大小、空闲块大小、空闲块链表节点头等信息。

·索引节点表,每个文件都对应着一个索引节点,里面反正用户的存取权限、信息等。

通过

路径访问文件,内核把文件路径经过转换映射到索引节点表中对应节点去。

·数据区。

文件系统实际存放数据的磁盘空间。

·空闲数据块表。

超级块中空间很小,所以把空闲数据块的信息写在数据区中。

VFS

LINUX通过虚拟文件系统转换来实现多文件系统的支持。

LINUX把对文件操作的系统调用转为对不通过文件系统操作的子程序调用,这些子程序都针对具体文件系统而编写。

虚拟文件系统不是真正的文件系统,而是一种映射机制来屏蔽下层的差异为上层提供方便。

1.2文件结构和目录结构

LINUX中的每个文件都对应虚拟文件系统的一个索引节点,里面存放有直接或多级指针能够记录文件的数据,这样设计是为了存取大文件。

目录也能抽象成文件,也通过索引节点表来描述,并且把目录表中的目录项存放在数据区中。

目录表的基本构成单位是目录项,有“文件名-索引节点号”构成。

文件节点索引表中并不包含文件名这个信息,文件名被填写在目录文件中。

·硬连接和符号(软)连接的区别:

硬连接能实现的功能符号连接都能实现。

硬连接只能用在文件和同一个文件系统,但是符号连接适用在目录,也适用在不同的文件系统间。

但是符号连接比硬连接更消耗内核资源,因为符号连接的转换规则是在内核中实现的,而硬连接则直接指向索引节点。

硬连接是文件名和索引节点的对应关系;符号连接是指向文件的路径

·文件系统相关编程:

从系统的实现角度来看,文件内在表示是唯一确定的索引节点。

如果从编程角度来看,文件可以通过文件描述符和文件指针来表示。

UNIXI/O库中有open,write,read,close,ioctl等系统调用来操作文件描述符。

在C库函数中,有fopen,fprintf,fread,fwrite,fclose等文件操作函数对文件指针进行处理,它们是对系统调用的再次封装。

从系统角度来说:

文件句柄就是文件的一种标志,是文件描述符表中的索引号。

进程的标志输入、输出和错误输出的文件描述符分别是0,1,2在unistd.h中将它们定义为STDIN_FILENO,STDOUT_FILENO和STDERR_FILENO。

从C函数库角度来说:

文件句柄是一个指向文件结构的指针。

进程的标志输入、输出和错误输出在stdio.h中被定义为stdin,stdout,stderr。

可以使用系统调用fileno将一个文件指针转为文件描述符。

1.3进程系统

·程序并行执行中的问题:

静态程序的概念不能很好描述并行环境下的规律,因此引入的进程的概念。

单道程序设计中,环境是封闭的,资源总被独占;而在并行环境中由于封闭性和资源的独占性被破坏,这将导致很多问题。

·进程和程序的区别:

程序是指令和数据的集合,是一个静态文本,存放在一个普通的文件中,该文件在索引节点表中的文件标志为“可执行”。

进程是程序在一个包括指令段、系统和用户数据的环境中,为了完成预定的任务而运行一次的过程。

进程被撤销后就不再存在,而程序的文本依然留在系统中。

·进程的物理表示:

为了描述动态变化的进程,我们把进程静态的分为3个部分:

程序部分、数据部分、进程控制块——统一称为进程映像。

进程的程序部分可以被多个程序所共享,共享代码段应该被编写成纯代码puercode,即该程序段的功能不随着调用的程序不同而存在差异。

程序段被执行的数据区和工作单元,当执行的不是共享代码段时,数据的一部分就被放入数据空间。

每个进程都有一个进程控制块PCB,用来跟踪并记录动态变化的进程执行和调动信息的数据结构,集中体现了进程的特征、状态和其他进程间的关系等。

·进程的虚空间:

操作系统的虚空间可以分成“进程虚空间”和“系统虚空间”。

可执行程序的指令和数据对应着进程虚空间的地址,由操作系统把进程虚空间地址映射到物理内存上。

这种映射是通过硬件寄存器和系统页表共同实现的。

·用户态和核心态:

用户态和核心态实际上是CPU工作的两种不同模式。

所有内核对外提供的功能都是按系统调用的形式。

进程进行一次系统调用,CPU将在用户态与核心态间切换一次,系统调用工作在核心栈,而普通用户调用将使用用户栈。

·进程上下文:

进程在生命期的所有状态都可以通过进程上下文来描述。

通常包括三个内容:

1用户级上下文:

包括代码段、数据段、用户段和共享内存段。

2寄存器上下文:

进程运行时各寄存器的内容

3系统级上下文:

进程控制块、进程使用的页表和核心栈

·进程转换

·进程调度:

核心将在几种情况下调用调度管理器:

当前进程被放入等待队列或者系统调用结束时,以及从核心态返回到用户态时。

LINUX支持两类不同进程:

普通与实时进程,不同之处体现在优先级和调度策略上。

如果一个实时进程处于可执行状态,它总在任何普通进程前执行。

实时进程采用两种调用策略:

时间片轮转和先进先出。

普通进程采用RoundRobin策略。

priority进程优先级、rt_priority实时进程优先级、counter进程运行运行时间

·对fork的理解:

fork之后父子进程的tast_struc除了进程号,其他的数据都一样。

利用虚空间技术,共享代码段(引用计数加1),复制数据段。

fork快完成的某阶段子进程被建立并保存上下文进入就绪队列等待调度,fork完毕之后父进程上下文被保存,返回子进程的进程标识符。

注意:

子进程的fork调用返回是0,父进程fork调用返回是子进程的进程号。

然后父子进程从fork的调用点开始分别继续运行。

父进程退出前需要使用wait或waipid等待子进程执行完毕和清除僵尸进程释放资源。

第二章进程间通信和同步

前言:

在linux/unix中支持多种进程间通信的方式,主要包括:

信号、信号量、消息队列和共享内存,管道(包括无名管道和FIFO)也是进程间通信的方式。

·2,2信号的捕获和处理:

#inlucdesignal.h//参见POSIX.1中定义

相关函数:

sigaction;//设置信号处理器structsigaction{

void;

sigset_tsa_mask;

intsa_flags;

};

信号处理器函数指针进程屏蔽的信号集合(3)信号处理器的标志

intsigemptyset;//信号集合清空

intsigfillset;//设置包含所有信号的全集

intsigaddset;//把一个信号加入信号集合

intsigdelset;//把一个信号从集合里删除

intsigismember;//判断信号是否包含在给定集合中intsigprocmask;//设置进程中断屏蔽码

how=[SIG_BLOCK,SIG_UNBLOCK,SIG_SETMASK],*oset对设置前屏蔽码做备份

使用信号处理器基本方法:

1.编写信号处理函数handler_sigproc;

//信号处理函数执行完毕的最后,记得要清堵塞的信号

//sigaddset;//信号处理器缺省堵塞的信号

//sigaddset;//信号处理器处理的信号

//sigprocmask;//清堵塞信号

2.设置信号处理器structactionact;

act.sa_handler=handler_sigproc;

sigemptyset;

sigaddset;//信号处理器执行期间堵塞相应的信号

sigaction;//将终止信号加入act信号处理器

快系统调用、慢系统调用都可能被信号打断,POSIX.1把被中断的系统调用返回-1,errno设置为EINTER,只要不是“原子操作”都可能被打断,注意对这类问题的容错处理:

ret=read;

if//如果则?

?

·2.3信号量

有名信号量是全局,只要知道它的名字就可以使用它;

无名信号量是局部,只能通过继承才能使用它;

相关函数:

头文件:

sys/types.h,sys/ipc.h,sys/sem.h

intsemget;//创建或取得一个信号量组

intsemctl;//信号量控制函数(取值/删除/设置等)intsemop;//信号量操作函数

信号量组ID

(2)进行怎样操作(3)操作次数

篇二:

网络编程读书笔记

网络编程读书笔记:

第一部分:

TCP的客户端程序。

什么是套间字呢?

首先套间字是一个族,它把所有通过套间字通信进程的共有特性都综合在一起了。

我们通过设置套间字,来设置通信。

服务程序的内容:

1、创建套间字

2、绑定套间字

3、将套间字设置为监听模式

4、等待请求

5、通过套间字进行通信

6、等待下一个请求

7、关闭套间字

现在来看具体程序。

(1)加载套间字库,SAStartup,由于第一个参数要

求是WORD型的,先采用wVersionRequested=MAKEWORD;生成一个十六

位的数值。

(2)创建套间字。

SOCKETsockSrv=socket;

(3)绑定套间字,就是将IP地址和端口号和我们创建的套间字连接起来。

先定义

一个SOCKETADDR_IN变量来接收我们要赋的值,然后用这个变量和sockSrv

连接起来。

SOCKADDR_INaddrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl;//htonl将主机字节

转换为TCP网络的字节顺序,IP地址,INDADDR_ANY表示任何地址都接收

addrSrv.sin_family=AF_INET;//TCP网络

addrSrv.sin_port=htons;//端口号码

bindaddrSrv,sizeof);//绑定套间字,

就是将地址、端口和套间字连接起来

first先设置进入监听模式,然后进行循环等待客户区请求。

second先用accept监听sockSrv,如何接收到请求,就把地址和端口信息放在

客户端缓存区中,并把sockSrv赋给一个新定义的套间字sockC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1