首页 > 新文章
  • Linux进程间通信:POSIX信号量 is a project mainly written in , based on the .文章目录概念描述编程接口注意事项编程案例信号量基本接口使用案例信号量父子进程间通信信号量实现 两进程之间通信 概念描述 英文:semaphore 简称SEM,主要用来进行进程间同步本质:内核维护的一个正整数,可对其进行各种+/-操作分类:systemV 信号量、POSIX 有名信号量、POSIX 无名信号量用途:用来标示系统...

  • Linux系统调用 ftruncate设置文件大小 is a project mainly written in , based on the .系统调用ftruncate可以将一个文件裁剪为指定的大小,函数描述如下: 头文件: 函数使用: int truncate(const char *path, off_t length); int ftruncate(int fd, off_t length);函数参数: 可以看到两者有...

  • Linux文件IO与内存映射:分散/聚集IO技术(scatter-gather) is a project mainly written in , based on the .前言 根据上文我们学习到的用户空间的IO缓冲区,操作系统为了减少系统调用的次数,节省系统开销,提出了用户空间的IO缓冲区,即为用户空间的文件读写开辟一段可以利用setvbuf配置大小的内存空间来作为文件IO缓冲区。 描述 为了在以上IO缓冲区的基础上更进一步得减少系统调用的次数,提出了分散/聚合IO技术,总体上是使用了单个向...

  • Linux文件IO与内存映射:用户空间的IO缓冲区 is a project mainly written in , based on the .文章目录用户空间IO缓冲区产生IO缓冲区 描述IO缓冲区的写模式自定义IO缓冲区 用户空间IO缓冲区产生 系统调用过程中会产生的开销如下: 切换CPU到内核态进行数据内容的拷贝,从用户态到内核态或者从内核态到用户态切换CPU到用户态 以上为普通到系统调用过程中操作系统需要产生的额外开销,为了提升系统调用的性能,这里推出用...

  • 编译内核指定模块,筛选当前模块依赖的组件 is a project mainly written in , based on the .关于内核模块编译的过程中,往往我们仅仅需要其中一个小的模块,但是却因为内核源码的庞杂而止步与模块依赖的筛选过程中。 为了更加便捷得对内核各个模块进行管理,这里提供一个小脚本来进行指定模块相关得模块留存,不相关的模块代码自动清除。 单独对内核指定模块进行编译,主要使用如下命令: 在相对目录为:../rpmbuild/BUILD/ker...

  • Linux 文件IO与内存映射:内存映射 is a project mainly written in , based on the .前言 前面几篇我们学习了用户空间的IO缓冲区,以及IO缓冲区的分散聚合IO技术. 为了减少系统调用的次数,提升系统性能,操作系统开发者门提出了这么多的缓存技术。 但是到这里这些技术同样有不足的地方:不论是读或者写文件,都需要将内容拷贝到IO缓冲区以及页高速缓冲区,这就增加了数据拷贝的次数,无形之中增加了CPU和内存的开销。 有没有...

  • C语言网络编程:close或者shutdown断开通信连接 is a project mainly written in , based on the .文章目录前言close函数介绍shutdown函数介绍 前言 这里在主要通过实例进行描述close函数在网络编程中的使用 TCP编程模型中客户端或者服务器只要主动通过close发起断开连接的请求,则通信连接可以中断。 可以通过在主进程中抓取通信端的断开信号,比如SIGINT,在信号处理函数中对该通信文件描述符进行关闭。...

  • C语言网络编程:accept函数详解 is a project mainly written in , based on the .文章目录前言函数描述代码实例如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的主动描述符转为被动描述符进行监听之后,接口accept通过三次握手与客户端建立连接 TCP 编程模型如下: 函数描述 #i...

  • T-tcpdump is a project mainly written in , based on the .文章目录写入和读取数据包抓取数据包抓取指定网卡流量指定数据的输出格式数据包抓取的方向输出信息的详细程度的可控选项抓取指定协议的数据包表达式介绍逻辑连接符的使用type的确定 写入和读取数据包 在工作或者生活中的网络故障排除时最有力的方式就是抓包分析网络状况,从而找到网络故障的原因。所以将数据包保存到文件中,可以方便得进行分析...

  • C语言网络编程:listen函数详解 is a project mainly written in , based on the .文章目录前言函数描述代码实例TCP服务器为什么调用listen 前言 根据TCP编程模型中我们可以看到之前的socket和bind接口是tcp服务器在为接收客户端的链接做准备,保证tcp的面向字节流,面向连接的可靠通信服务正常进行。接下来的listen端口则为我们进行三次握手与客户端进行链接的接口。 TCP编程模型如下...

  • C语言网络编程:socket函数 is a project mainly written in , based on the .函数描述 头文件 函数使用int socket(int domain, int type, int protocol); 函数功能:创建一个通信的终点,并返回一个文件描述符来代表通信的终点 函数参数: a. domain 代编当前创建的socket文件描述符使用的是哪...

  • C语言网络编程:bind函数详解 is a project mainly written in , based on the .文章目录函数功能函数头文件函数使用函数参数函数举例为什么需要bind函数服务器如何知道客户端的ip和端口号htons函数`htons`兄弟函数`htonl`,`ntohs`,`ntohl`为什么要进行端口的大小端序的转换`inet_addr`函数 函数功能 bind API能够将套接字文件描述符、端口号和ip绑定到一起 注意...

  • C语言网络编程:TCP编程模型 is a project mainly written in , based on the .编程模型 TCP编程模型如下 TCP服务器的工作过程如下: 服务器创建一个专门的“文件描述符”来监听来自客户端的“三次握手”,然后建立链接链接建立成功后,服务器会分配一个专门的“通信文件描述符”,用于实现与该客户端的通信 以上通信模型是由于TCP本身的特点:面向连接的,可靠的,字节流通信方式 通信过程 服务器: 创建套接...

  • C语言网络编程:TCP客户端实现 is a project mainly written in , based on the .文章目录客户端通信步骤为什么客户端没有bind和listen客户端connect函数介绍局域网内客户端和服务器通信代码实例 客户端通信步骤 根据基本TCP网络通信编程模型 我们可以知道客户端的实现主要有几个步骤 socket创建客户端通信的套接字文件,并指定通信的协议族和数据类型使用connect主动向服务器发起连接请求...

  • C语言网络编程:TCP实现多线程实现多客户端 is a project mainly written in , based on the .TCP通信的编程模型如下: TCP通信是必须要有一个服务器,通过accept函数与客户端socket进行三次握手连接创建的通信描述符与客户端进行数据传输。 此时可以将accept函数的连接设置为多线程形式,轮训监听,每获取到一个客户端的连接,则创建一个子线程专门用于和该客户端进行通信。 实现代码如下: server.c #inc...

  • C语言网络编程:UDP通信实现 is a project mainly written in , based on the .文章目录UDP的特点:UDP的用途UDP编程模型UDP通信代码实现 UDP的特点: udp 协议是一种无链接的不可靠传输协议,且UDP每次发送到分组数据大小都是固定的,它的主要特点如下: 不建立连接没有应答机制不会根据网络状况的好坏调整分组数据的大小 UDP之所以为不可靠传输协议,主要还是因为UDP没有链接和应答机制,导致...

  • C语言网络编程:多路IO select实现多客户端 is a project mainly written in , based on the .文章目录阻塞式的服务器程序多线程服务器程序非阻塞式服务器程序基于事件响应的服务器程序事件响应服务器程序的实现`select` 阻塞式的服务器程序 我们接触过最多的最基础的网络通信模型为TCP/UDP通信模型,以下为TCP通信模型的基本流程C语言网络编程:TCP客户端实现 但是以上过程中每个通信函数都是阻塞的,而且建立连接之...

  • C语言的单链表逆序和指定范围逆序 is a project mainly written in , based on the .文章目录前言逆序指定范围逆序源码实现 前言 关于链表的逆置,是考察对链表指针的理解。知道了如何不实用额外空间,同时使用O(n)复杂度对链表进行逆序之后将会对链表有好理解。 同时关于如何在指定范围内对链表逆置同样可以进一步加深理解 逆序 基本过程如下: 保留原始链表的next指针域,p = head -> next将原始...

  • 记一次shell脚本推后台stopped的问题 is a project mainly written in , based on the .我们知道linux 下shell可以被分为交互式脚本和非交互式脚本。 交互式脚本即 输入命令之后shell会等待你的输入,当你输入之后命令会被立即提交从而执行。这个时候我们常见的终端bash,以及login提示等都是交互式命令。 非交互式脚本即shell解释器不需要等待终端的输入,自己去执行脚本中的命令,当遇到脚本中的EOF则结束。...

  • C语言的单链表创建:头插法/尾插法 is a project mainly written in , based on the .文章目录前言链表头插法链表尾插法源码实现 前言 接下来一段时间,将对数据结构进行复习,总的来说数据结构自大学之后忘记得有点吓人,为了防止脑容量本就小得脑袋更小,必须得持续性得温故了。 链表数据结构得提出 是为了弥补数组上 元素插入、删除导致大量元素移动得缺点,这里将C语言得指针提取出来构造一个指针管理得存储数据得结构,使用...