Linux网络编程
记录自己学习网络编程过程中的总结
rotation ㅤ
这个作者很懒,什么都没留下…
展开
-
Linux进程间通信之POSIX共享内存
共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输。这种高效率带来的问题是,我们必须用其他辅助手段来同步进程对共享内存的访问,否则会产生竞态条件。因此,共享内存通常和其他进程间通信方式一起使用。 Linux下有三种共享内存的IPC技术:System V共享内存、共享文件映射(mmap)、POSIX共享内存。 我们在这里只介绍POSIX共享内存。要使用POSIX共享内存对象需要完成下原创 2017-08-02 21:15:34 · 2734 阅读 · 0 评论 -
Linux进程间通信之POSIX信号量
当多个进程同时访问系统上的某个资源的时候,就需要考虑进程的同步问题,以确保任一时刻只有一个进程可以拥有对资源的独占式访问。POSIX信号量不仅可以用于进程之间的同步,也可以用于线程之间的同步。概述SUSv3规定了两种类型的POSIX信号量。命名信号量:这种信号量拥有一个名字。通过使用相同的名字调用sem_open(),不相关的进程能够访问同一个信号量。未命名信号量:这种信号量没有名字,相反,它位原创 2017-08-01 10:33:37 · 2062 阅读 · 0 评论 -
Linux进程间通信之POSIX消息队列
消息队列可认为是一个消息链表,它允许进程之间以消息的形式交换数据。有足够写权限的进程或线程可往队列中放置消息,有足够读权限的进程或线程可从队列中取走消息。每个消息都是一个记录,它由发送者赋予一个优先级。与管道不同,管道是字节流模型,没有消息边界。 本文介绍的是POSIX消息队列。POSIX消息队列与System V消息队列的相似之处在于数据的交换单位是整个消息,但它们之间仍然存在一些显著的差异。原创 2017-07-30 15:49:23 · 3315 阅读 · 0 评论 -
Linux进程间通信之管道
IPC是进程间通信(interprocess communication)的简称。我们在这里对有关管道的知识进行总结。 我们将介绍三种管道:管道(pipe)。管道是第一个广泛使用的IPC形式,既可在程序中使用,也可以从shell中使用。管道只能在具有共同祖先(指父子进程关系)的进程间使用。FIFO。FIFO是管道概念的一个变体,FIFO(First In First Out,先进先出),也叫有原创 2017-07-29 11:04:13 · 1012 阅读 · 0 评论 -
一个简单的TCP自定义通信协议
我们为什么要自定义TCP应用层传输协议?因为在TCP流传输的过程中,可能会出现分包与黏包的现象。我们为了解决这些问题,需要我们自定义通信协议进行封包与解包。什么是分包与黏包?分包:指接受方没有接受到一个完整的包,只接受了部分。 黏包:指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。产生分包与黏包现象的原因是什么?产生分包原因:可能是IP分片传输导原创 2017-06-06 22:15:05 · 31545 阅读 · 13 评论 -
I/O多路复用之select
I/O复用使得程序能同时监听多个文件描述符,这对提高程序的性能至关重要。通常,网络程序在下列的情况下需要使用I/O复用技术:客户端程序要同时处理多个socket。客户端程序要同时处理用户输入和网络连接。TCP服务器要同时处理监听socket和连接socket。这是I/O多路复用使用最多的场合。服务器要同时处理TCP请求和UDP请求。服务器要同时监听多个端口,或者处理多种服务。需要指出的是原创 2017-07-17 22:25:08 · 3381 阅读 · 0 评论 -
I/O多路复用之poll
由于poll是对select的改进,poll的功能和select的功能一样,只不过是参数稍微不同,poll的底层原理也和select差不多。 对多路复用select()不太熟悉的可以参考这篇博文:I/O多路复用之select 我们首先回忆一下 select接口 :int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exc原创 2017-07-18 14:29:59 · 12834 阅读 · 0 评论 -
I/O多路复用之水平触发和边沿触发模式
多路I/O复用不管是select,poll还是epoll,其都是通过同时监听多个文件描述符,当有文件文件描述符处于就绪状态时,触发通知。LT(Level Trigger,水平触发)模式和ET(Edge Trigger,边沿触发)模式是两种文件描述符准备就绪的通知模式。水平触发通知:如果文件描述符上可以非阻塞地执行I/O系统调用,此时认为它已经就绪,触发通知。 边沿触发通知:如果文件描述符自上次状态原创 2017-07-18 22:36:01 · 9417 阅读 · 1 评论 -
I/O多路复用之epoll
epoll()是Linux特有的I/O复用函数。它在实现和使用上与select,poll有很大的差异。 关于select和poll可以参考:I/O多路复用之select , I/O多路复用之poll 首先,epoll使用一组函数来完成任务,而不是单个函数。其次,epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而无须像select和poll那样每次调用都要重复传入文件描述符集原创 2017-07-19 23:04:36 · 3361 阅读 · 0 评论 -
I/O多路复用之比较select&poll&epoll
终于把I/O多路复用的几篇总结写完了,也算是下了不少功夫吧。期间收到私信,说希望我能持久更新。很开心自己写的东西,能够帮到别人。好了,废话不多说了,通过这篇博客总结一下三种多路复用I/O的异同。前面我们讨论了select,poll和epoll三组I/O复用系统调用,这3组系统调用都能同时监听多个文件描述符。它们将等待由timeout参数指定的超时时间,直到一个或者多个文件描述符上有事件发生时返回,返原创 2017-07-20 16:35:36 · 3362 阅读 · 0 评论 -
linux高级I/O函数sendfile
sendfile函数,顾名思义,用于传输文件而设计的函数。函数原型:#include<sys/sendfile.h>ssize_t sendfile(int out_fd,int in_fd,off_t* offset,size_t count); sendfile函数在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,效率很高,这被称为零拷原创 2017-06-19 22:39:04 · 2986 阅读 · 0 评论 -
linux高级I/O函数splice与tee
splice函数是linux系统提供的高级I/O函数,同sendfile系统调用函数一样,也是零拷贝操作函数。splice函数用于在两个文件描述符之间的移动数据。函数原型:#include <fcntl.h> ssize_t splice(int fd_in, loff_t *off_in, int fd_out, loff_t* off_out, size_t len, unsigned i原创 2017-06-20 23:13:24 · 3109 阅读 · 0 评论