
linux
Wryyyy.
这个作者很懒,什么都没留下…
展开
-
高级IO--poll,epoll
poll接口流程介绍:int poll(struct pollfd* fds, nfds_t nfds, int timeout); fds: 要监控的描述符事件结构体 struct poll{ int nfds; //要监控的描述符 short events; //想要监控的事件 short revents; //实际就绪的事件} events: POLLIN----可读 POLLOUT----可写 revents:当poll接口调用返回的时候,这个描述符实际就绪的事件就会被写入r原创 2020-09-03 19:10:11 · 232 阅读 · 0 评论 -
高级IO--select
高级IO:IO概念 / 类型 / 处理流程 / 多路转接IO的实现模型四种典型IO:阻塞IO, 非阻塞IO, 信号驱动IO,异步IOIO过程:发起IO调用,等待IO条件就绪, 进行数据拷贝 阻塞IO:发起IO调用,若IO就绪条件不满足,则一直等待优点:流程简单,一个IO完成后进行下一个缺点:无法充分利用资源,效率较为低下 非阻塞IO:发起IO条件,若IO就绪条件不满足在,则报错返回优点:相较于阻塞IO,对资源利用较为充分,可以利用就绪等待时间干点其他事情或者发起另一个I原创 2020-08-08 15:59:19 · 174 阅读 · 0 评论 -
计算机网络--网络层/链路层
网络层:负责地址管理和路由选择;ip协议格式:地址管理 IP地址:ipv4/ipv6 ipv4-uint32_t ---- 总共不到43e个IP地址,用于在网络中表示唯一主机 我们在上网的时候,应该如何分配IP地址:手动分配/计算机进行分配 IP地址分配的如何做到,所有的主机都不会分配冲突?----划分网络进行分配划分网络:每个小网络给自己网络中的主机分配固定的某些IP地址,只要保证每个网络之间固定分配的IP不冲突IP地址组成: 网络号 + 主机号网络号:是一个网络的标识,这个原创 2020-07-23 22:45:03 · 334 阅读 · 0 评论 -
socket编程
UDP协议:向应用程序提供一种面向无连接的服务 TCP协议:提供一种面向连接的,可靠的数据传输服务网络通信程序编写时,到底传输层使用UDP好还是TCP?TCP ---- 传输控制协议 ——面向连接,可靠传输,面向字节流UDP ----用户数据报协议——面向无连接,不可靠传输,面向数据包TCP保证可靠传输,但是传输速度没有UDP快。TCP应用于安全性要求高 / UDP应用于实时性高的场景socket套接字编程:网络程序的编写udp通信编程:客户端不主动绑定端口地址,是为了降低端口冲突的原创 2020-07-11 16:37:08 · 152 阅读 · 0 评论 -
计算机网络--传输层
传输层:负责应用之间的数据传输(通过端口的描述 - -描述哪两个进程在进行通信)- -UDP/TCPUDP:无连接,不可靠,面向数据报 udp协议格式:特性解析: 无连接:不需要建立连接,只要知道对方的地址信息就能直接发送数据 不可靠:udp在传输层不保证数据安全有序的到达对端- - -需要程序员在应用层进行包序管理 面向数据报:有最大长度限制的传输方式- - -取决于数据报长度字段,因为长度字段只有16位,因此数据报总长度不能大于64k,因此若要传输的数据比较大,则需要程序员在应用层进行分原创 2020-07-20 18:47:51 · 168 阅读 · 0 评论 -
计算机网络--应用层
应用层: 直面程序员的一层,因为应用程序是程序员自己写的,因此应用层的协议都是程序员自己定的自定义协议 程序员自己根据自己应用的特点,定义协议(数据格式/数据描述信息)eg:以一个简单的网络版计算机为例 功能:客户端发送两个数字以及一个运算符给服务端,服务端获取到数据然后进行运算int num1; int num2; char op;num1, num2, op ----将所有的数据转成字符串,使用特殊字符间隔;这时候就将数据按照指定协议组织起来了.采用结构体构造二进制数据串struct原创 2020-07-14 17:47:32 · 166 阅读 · 0 评论 -
网络基础
网络基础网络发展背景网络的划分:局域网(覆盖范围在1000m) / 城域网(覆盖范围在20km)/广域网(大于20km) 互联网 / 因特网 — 更大的国际性的广域网 以太网 / 令牌环网 — 组网方式互联网是一种复杂的星型网络---- 容灾性更强IP地址IP地址:uint32_t ----无符号4字节整数 在网络中作为主机的唯一标识 ---- 网络主机之间的定位(哪个主机与哪个主机之间进行通信) -----通过IP地址进行标识 网络中每条数据中都会包含源端IP地址 / 对端IP地址原创 2020-07-01 11:14:24 · 114 阅读 · 0 评论 -
线程,信号量
多线程信号量信号量:可以实现进程/线程间同步与互斥。信号本质就是一个计数器 + pcb等待队列信号量同步的实现: 通过自身的计数器对资源进行计数,并且通过计数器的资源计数,判断进程/线程是否能够符合访问资源的条件,若符合就可以访问,若不符合则提供的接口使进程/线程阻塞;其他进程/线程促使条件满足之后,可以唤醒pcb等待队列上的pcb信号量互斥的实现: 保证计数器的计数不大于1,保证了资源只有一个,同一时间只有一个进程/线程能够访问资源,实现互斥。代码操作1.定义信号量:```sem_t``原创 2020-06-20 19:06:37 · 600 阅读 · 0 评论 -
多线程,线程安全
文章目录多线程线程安全线程安全的实现多线程线程安全线程安全:多个执行流对临界资源争抢访问,但是不会出现数据二义性线程安全的实现 同步:通过条件判断保证对临界资源访问的合理性 互斥:通过同一时间对临界资源访问的唯一性实现临界资源访问的安全性同步是如何实现/互斥又是如何实现? 互斥的实现:互斥锁 互斥锁实现互斥原理:互斥锁本身是一个只有0/1的计数器,描述了一个临界资源当前的访问状态,所有执行流在访问临界资源资源都需要判断当前的临界资源状态是否允许访问,如果不允许则让执行流等待,否则可以让原创 2020-06-20 19:09:47 · 148 阅读 · 0 评论 -
多线程概念,线程控制
多线程线程概念:进行多任务处理多任务处理:多创建几个进程,一个进程就有一个pcb,能够串行化的完成一个任务,在一个进程创建多个pcb,因为pcb是调度程序运行的描述,因此有多少个pcb就会有多少个执行流程多进程多线程最早的时候,进程就是一个pcb,操作系统通过pcb实现调度管理;然而学习多线程,因为线程是进程中的一个执行流,并且这些pcb共用同一个虚拟地址,这些pcb更加轻量化,因此也被称为轻量级进程在linux中,pcb就是调度程序运行的描述,一个pcb就可以调度一段程序的运行;创.原创 2020-07-29 15:37:44 · 143 阅读 · 0 评论 -
进程信号-2
进程信号默认处理方式调用的函数与忽略处理方式调用的函数都是系统中已经实现的----内核中直接处理自定义信号处理方式:用户自己写一个事件处理函数;在内核中有一个信号处理动作数组信号的阻塞:并不是不接收信号。信号依旧可以注册,只是表示哪些信号暂时不处理 在PCB中有一个位图,位图叫block----阻塞信号集合;这个集合中的信号如果来了(添加到pending位图)则暂时不处理...原创 2020-07-29 15:45:28 · 139 阅读 · 0 评论 -
进程信号-1
进程信号是什么?信号是一个软件中断;作用: 操作系统通过信号告诉进程发生了某个事件,打断进程当前操作,去处理这个事件 生活中信号多种多样,并且肯定是一个信号对应一个事件,并且我们肯定能识别这个信号操作系统中信号也同样如此:通过kill -l命令可以查看系统中的信号种类 ---- 62 种1~31号信号:从unix借鉴而来的,每个信号都有具体对应的系统事件;----非可靠信号(有可能会信号丢失—事件丢失)34~64号信号:后期扩充的,因为没有具体对应的事件,所以命名比较草率----可靠信号(.原创 2020-07-29 15:43:36 · 208 阅读 · 0 评论 -
进程间通信-2
进程间通信二 共享内存 特性:1.共享内存是最快的进程间通信方式2.生命周期随内核注意: 共享内存并没有自带同步与互斥----多个进程访问的时候存在安全问题操作:代码操作流程/具体的代码 + 命令操作ipcs / ipcrm本质原理:在物理内存上开辟一块内存空间,多个进程可以将同一块物理内存映射到自己的虚拟地址空间,通过自己的虚拟地址直接访问这块空间,通过这种方式实现数据共享。 管道中的通信:涉及到两次用户态与内核态之间的数据拷贝;将数据写入管道,从管道读取数据。 ..原创 2020-07-29 15:46:13 · 112 阅读 · 0 评论 -
进程间通信-1
进程间通信IPC : 操作系统为用户提供的几种进程通信方式1.为什么操作系统要为用户提供进程间通信方式呢? 因为进程的独立性(每个进程都有自己的独立虚拟地址空间,操作的都是自己的地址),因此进程间无法直接通信2.如何提供进程间通信方式 给多个进程之间提供一个大家都能访问到的传播介质。并且操作系统在提供进程间通信方式的时候也根据通信场景的不同提供不同方式 从unix借鉴而来: 管道----资源传输 systemV标准的进程间通信方式:共享内存 消息队列 信号量管道 传输资源..原创 2020-07-29 15:41:00 · 97 阅读 · 0 评论 -
动态库/静态库的打包和使用
库文件: 打包了一堆实现了的常用代码 1.将各个.c文件编译成为目标文件gcc -c child.c -o child.o动态库的打包gcc -c -fPIC child.c -o child.ogcc -shared child.o -o libmychild.so动态库的命名方式: libxxx.so静态库的打包gcc -c child.c -o child.oar -cr libmychild.a child.o静态库的命名方式: libxxx.aldd main查看.原创 2020-07-29 15:29:33 · 458 阅读 · 0 评论 -
硬链接与软链接
硬链接为源文件创建一个硬链接,通过硬链接文件来操纵源文件与源文件共用一个inode节点,相当于源文件的别名,通过自己的inode节点访问源文件数据ln test.txt test.hard 软链接为源文件创建一个软链接,通过软链接文件来操纵源文件本质上是一个独立的文件,有自己的inode节点,文件数据保存源文件的路径,通过这个路径访问源文件数据软链接可以跨分区,硬链接不可以ln -s test.txt test.soft 硬链接与软链接区别删除源文件,软链接失效,硬链接的链接数只.原创 2020-07-29 16:02:00 · 104 阅读 · 0 评论