专注于linux,网络

积一时之跬步,臻千里之遥程,非宁静无以致远,夫学须静也,才须学也,非学无以广才,非志无以成学...

16-基于udp的客户端/服务端通信

1. 使用udp协议通信 在此之前,我们基于TCP的客户端/服务端通信示例是有连接方式的,客户端会先调用connect发起连接,当两端tcp连接建立完成,然后服务端调用accept接受客户端的连接,通过套接字开始通信。 UDP协议是无连接不可靠的,没有被动套接字和主动套接字之分,客户端和服务端...

2018-10-22 11:15:11

阅读数 246

评论数 0

15-SO_RCVBUF和SO_SNDBUF套接字选项

1. 套接字缓冲区 对于tcp协议来说,客户端和服务端在建立tcp连接的时候,双方会通告自己的接收窗口大小(告诉对方自己能接收的数据大小),然后双方就会根据接收窗口来调整自己的发送窗口大小。 如果你已经忘的差不多了,请参考: 19-tcp连接建立 , 如果你完全看不明白请参考:tcp/ip协议...

2018-10-14 00:12:36

阅读数 197

评论数 0

14-改写tcp服务器

1. 使用select改写tcp服务器 在此之前,回顾一下多进程并发型服务器通信过程,并发型服务器的做法是针对每一个客户端请求,服务器的父进程就fork创建一个子进程来处理客户端的请求。如果有大量的客户端请求的话,那么服务器也需要创建大量的子进程来处理请求,这将会消耗服务器大量的系统资源。  ...

2018-10-13 16:05:57

阅读数 118

评论数 0

数据结构基础心法

根据数据结构学习目录整理而成的知识图谱,还需完善。  

2018-10-09 22:26:57

阅读数 119

评论数 0

13-select重写客户端和tcp优雅关闭

在阅读此篇之前,请先看完第11篇的一小节,传送门:11-服务端进程终止和SIGPIPE信号 1. 服务器进程终止的问题 在第11篇中的第1小节中,tcp客户端需要同时处理两个输入:标准输入和tcp套接字,tcp客户端代码如下所示: //循环读写数据 while (1) { ...

2018-10-09 22:19:53

阅读数 275

评论数 0

46-内存映射的保护和同步

1. 保护权限 mmap函数的prot参数可指定内存映射区的保护权限,例如指定PROT_READ和PROT_EXEC,在调用open打开文件就应该指定O_RDONLY或者O_RDWR。如果指定了PROT_WRITE,打开的文件应该使用O_WRONLY或者O_RDWR。   由于一些硬件架构对...

2018-10-06 13:39:21

阅读数 303

评论数 0

45-内存映射的陷阱

       本篇将介绍内存映射过程中的一些系统分页边界陷阱,可助你打通任督二脉,掌握内存映射基本的使用和出错处理。   1. 第一种情况 之前有说过在调用mmap函数创建内存映射时,建议指定参数length最好是系统内存分页的整数倍,虽然这并不是强制的,但这么做当然是有原因的,如果参数le...

2018-10-06 09:34:38

阅读数 218

评论数 0

44-共享文件映射

1. 文件映射 内存映射主要分两种:文件映射和匿名映射。 上一篇讲的就是文件映射,一般创建文件映射需要以下几个步骤: 1. 调用open函数打开一个文件,获得其文件描述符 2. 将文件描述符作为mmap函数的参数传入 执行完以上步骤后,mmap函数会将文件映...

2018-10-05 17:53:53

阅读数 158

评论数 0

43-初窥内存映射mmap

1. 文件通信 如果你已经完成了进程间通信的学习,相信你对进程间通信已经有了一个初步的了解。由于进程之间是相互独立的,不能相互访问,进程之间想要通信必须借助内核空间,因为内核空间对于进程之间是共享的。 像这样的进程间通信的方式有很多种,例如管道、信号、共享内存、消息队列、套接字、命名管道等,在...

2018-10-04 19:51:10

阅读数 150

评论数 0

42-使用flock文件锁

1. flock函数 flock函数是专门用于实现对文件加锁的,与fcntl不同的是,flock系统调用最初是源自BSD的,而fcntl则是源自System V,flock是对整个文件进行加锁,而fcntl不仅可以对整个文件加锁,还可以对文件部分区域加锁,更加具有灵活性。  flock - ...

2018-10-03 16:04:47

阅读数 148

评论数 0

44-http协议

参考资料: 《Web性能权威指南》 《HTTP权威指南》   1. http协议概述 http协议全称为超文本传输协议(HTTP,HyperText Transfer Protocol),是基于tcp协议的一个应用层协议,主要定义web浏览器和web服务器之间交换数据的过程以及数据的格式...

2018-10-02 20:51:13

阅读数 133

评论数 0

41-fcntl设置文件锁

1. 文件锁 当多个进程打开同一文件进行读写时可能会出现数据混乱的问题,原因在于进程间共享同一文件读写指针位置,也就是f_pos(关于f_pos参考:4-文件描述符与打开的文件之间的关系的第三小节file结构体)。 解决这个问题的方法有很多,比如可以使用信号量完成进程同步,但通常使用文件锁会更...

2018-10-02 14:28:01

阅读数 147

评论数 0

40-System V——信号量的细节问题

1. 多个进程操作信号量 假设此时有多个进程在请求信号量发生阻塞时,且每个进程请求信号量减去的值都是一样的,那么到底哪个进程能继续执行是不确定的,这取决于调度算法。如果在阻塞的进程中,每个进程请求信号量减去的值都是不一样的,那么则会按照先满足条件的先执行的顺序进行。 例如此时有A和B两个进程阻...

2018-10-01 22:49:47

阅读数 166

评论数 0

39-System V——信号量

1. 什么是信号量    前面学过的System V IPC两种进程通信方式:共享内存和消息队列都是用于在进程间对共享区域的数据的交换传递来实现进程间通信,如果有多个进程同时向共享内存写数据可能就会出现数据混乱的问题。    信号量也是System V IPC的一种通信方式,和其他IPC方式不同...

2018-10-01 20:57:29

阅读数 205

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭