
Unix环境高级编程
文章平均质量分 86
狱典司
异步但IO!
展开
-
Epoll 原理及应用 && ET模式与LT模式
epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。目前epell是linux大规模并发网络程序中的热门首选模型。epoll除了提供select/poll那种IO事件的电平触原创 2022-06-08 19:17:57 · 593 阅读 · 0 评论 -
可扩/减容线程池C语言原理讲解及代码实现
客户端相当于生产者,服务端相当于消费者。线程池相比较于传统的多线程模型,每次创建线程和销毁线程的开销是可以被节省的。故放弃每来一个请求就创建一个线程的机制,采用一次性批量产生线程的方式。所谓线程“池”,这个池是一个虚拟的概念,指的是产生的线程被保存在的可访问地址。当没有任务时,线程池里的线程都阻塞()在的条件变量上;当有客户端发来了任务/请求,server需要去唤醒池中的线程:被唤醒的线程从任务队列中取出任务并完成处理后,重新回到线程池中等待任务,即等待被唤醒。多路IO转接处理的是客户端怎么去和服务器建立原创 2022-06-05 20:40:18 · 939 阅读 · 0 评论 -
5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)
文章目录一、计算C语言的数据表示与处理计算C语言的基本运算操作内存表和符号表类型转换函数类型的分析指令复合指令句法函数函数激活(Activation Record)函数激活定义函数激活存储内容二、并发多道程序设计和分时Unix分时:存储的保存和加载中断(interrupt)时钟中断( Clock Interrupt )系统调用(system call)进程切换(上下文切换)分时的实现应用层并发三、程序、进程和线程什么是程序?什么是进程?进程的状态有哪些?其转换关系是怎么样的?进程什么时候开始产生/运行?什么原创 2022-01-07 22:05:08 · 4757 阅读 · 0 评论 -
用Linux / C实现基于自动扩/减容线程池+epoll反应堆检测沉寂用户模型的服务器框架(含源码)
用Unix / C实现基于自动扩/减容线程池+epoll反应堆模型的服务器框架前言服务器端源码客户端源码自定义库 helper.c 和 helper.hhelper.chelper.hMakefile文件使用前言由于作者本人最近在忙期末复习(KPI压力,害),目前暂时不对该代码的各类结构体、函数单独拎出来做分析了,这项工作等到这个月考完试之后在完成!代码的大部分内容都有比较详细的注释,这一个月内如果有读者有看不懂源码的地方可以在评论区提问,我看到会回复!如有误也欢迎批评指正!这个基于线程池和epol原创 2021-12-09 12:30:56 · 2095 阅读 · 1 评论 -
监控文件描述符的六种方式(进程监控、select、poll、非阻塞轮询I/O、异步I/O、线程监控)
监控文件描述的六种方式方法1:用进程来监控文件描述符方法2 :使用select来监视文件描述符select函数代码示例使用poll来监视文件描述符poll函数代码示例阻塞型读操作会使调用程序一直阻塞到输入可用为止。当进程要从多个源端接收输人时这样的阻塞会引起一些问题,因为进程无法知道下一个输入是由哪个文件描述符产生的。因为服务器需要从多个客户机接收输入,所以多文件描述符问题通常都出现在客户机-服务器结构的编程中。下面列出了POSIX中六种常见的监视多个文件描述符的输入的方法。1.每个文件描述符都由一个原创 2021-11-09 17:16:34 · 3830 阅读 · 0 评论 -
Unix系统编程 信号部分学习笔记
《Unix系统编程》Unix信号学习笔记一、 基础概念二、 信号的产生三、对信号掩码和信号集进行操作四、捕捉与忽略信号 —— sigaction五、等待信号 —— pause、sigsuspend和sigwait六、信号处理:错误和异步信号安全七、用siglongjmp和sigsetjmp进行程序控制一、 基础概念信号是对事件(小事件)相关进程的软件层面通知;有发出者和接收者(都是进程)–> 进程间通信信号实际类型:int信号的产生、递送、挂起:产生:导致信号发生的事件递送:传原创 2021-11-05 19:02:30 · 707 阅读 · 0 评论 -
Unix上用C程序实现pipe管道命令“ | “(pipe,fork,dup2,close,execl,重定向)
#include<errno.h>#include<stdio.h>#include<unistd.h>#include<sys/types.h>int main(void){pid_t childpid;int fd[2];if((pipe(fd) == -1) || ((childpid = fork()) == -1)){//{ int pipe(int filedes[2])}: fd[0]先进先出的读,fd[1]写; pipe函原创 2021-10-15 13:03:40 · 702 阅读 · 0 评论 -
用图片带你串起进程列表、进程控制块、inode节点、文件描述符列表、文件实体、文件系统等知识
万文长篇,深入浅出地从进程讲起,用最简单明了的图片带你串起进程列表、进程控制块、inode节点、文件描述符列表、文件实体、文件系统等知识(深度好文,建议收藏)前言总览一、进程、线程1.1 什么是程序?1.2 什么是进程?1.3 什么是线程?二、进程列表2.1 PCB —— 进程控制块2.2 小程序 —— 查看进程列表三、进程实体3.1 用户地址空间(VM)3.2 进程实体与PCB、VM、PL的关系:3.3 联系线程列表四、通过进程联系文件系统4.1 文件系统对文件的管理系统(打开)文件表4.2 文件描述符原创 2021-10-11 23:01:16 · 1539 阅读 · 3 评论 -
详解Linux下静态库/动态库的生成和使用(含代码示例和操作流程)&&动态库和静态库的区别
文章目录一、库的概念Windows的库Linux的库二、动态库和静态库的区别1. 载入顺序不同2. 大小与共享的差异3. 库函数调用的差异三、静态库的创建和使用1. 创建静态库的步骤:(一)、ar命令的使用方法(二)、生成静态库的实例2. 调用静态库的测试程序(一)调用静态库的测试程序:test.c(二)编译使用了库函数的程序四、动态库的创建和使用1. 动态库的创建2. 动态库的使用3. 通过调用系统函数来使用动态链接库的实例关于gcc的使用方法可以参考下方链接博客:Linux下详解gcc编译过程(原创 2021-09-25 18:26:50 · 15770 阅读 · 0 评论 -
Linux下详解gcc编译过程(含代码示例)&& gcc使用教程
文章目录准备: test.c1. 编译过程1.1 预处理(Pre-Processing)1.2 汇编(Assembling)1.3 编译(Compiling)* gcc -c1.4 链接(Linking)2. 简化过程 —— gcc3. gcc常用选项总结准备: test.c在正式开始之前,若是想要通过一个代码(.c文件)来熟悉gcc的编译流程,可以在你的测试目录下使用如下代码:// 文件名:test.c 1 #include <stdio.h> 2 #includ原创 2021-09-25 17:38:02 · 33354 阅读 · 4 评论 -
CentOS 7如何安装 libbsd-dev && 编译apue.3e时出错处理(以便使用Unix环境高级编程中的apue.h库)
1. 首先需要下载源代码压缩包:UNIX高级环境编程的源代码 – src.3e.tar.gz2. 在CentOS-7下解压源代码文件tar -zxv -f src.3e.tar.gz -C /usr/include/3. 转到解压后的apue.3e/目录下进行make编译:make4. 进行编译后报错信息为:gcc -ansi -I…/include -Wall -DLINUX -D_GNU_SOURCE barrier.c -o barrier -L…/lib -lapue -原创 2021-09-06 20:56:45 · 2022 阅读 · 0 评论