- 博客(57)
- 收藏
- 关注
原创 字符设备驱动基础框架
在Unix/Linux操作系统中,每个文件都由一个inode(索引节点)来索引。inode是特殊的磁盘块,它们在。inode的数量限制了文件系统中可以存储的文件/目录的总数。每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
2023-11-14 00:29:24 408
原创 L10 数据库
callback 回调函数,只有在查询时,才传参。返回值:成功为0 SQLITE_OK ,出错 错误码。返回值:成功为0 SQLITE_OK ,出错 错误码。参数:arg 接收sqlite3_exec 传递来的参数。.schema 查看表的结构。1)系统命令 , 都以'.'开头。参数:filename 数据库名称。errmsg 错误消息。f_value 列的值得地址。3-- 查看数据库记录。f_name 列的名称。2-- 插入一条记录。4-- 删除一条记录。5-- 更新一条记录。
2023-09-26 22:21:43 267
原创 l8-d21 域名解析与http服务器实现原理
主机结构在 <netdb.h> 中定义如下:/* 官方域名 *//* 别名*//* 地址族(地址类型) *//* 地址长度 *//* 地址列表 */#define h_addr h_addr_list[0] /* 实现向后兼容性 */结构的成员包括:h_name :主机的正式名称h_aliases:主机的备用名称数组,以NULL结尾指针h_addrtype:地址类型;AF_INET或AF_INET6h_length:地址的长度(以字节为单位)
2023-09-18 21:50:55 223
原创 l8-d19 广播与组播
数据包发送方式只有一个接受方,称为单播如果同时发给局域网中的所有主机,称为广播只有用户数据报(使用UDP协议)套接字才能广播广播地址一个网络内主机号全为1的IP地址为广播地址发到该地址的数据包被所有的主机接收255.255.255.255在所有网段中都代表广播地址int on = 1;
2023-09-17 21:21:35 110
原创 套接字属性设置
SOL_SOCKET 该级别的选项只作用于套接字本身。IPPROTO_IPV6 该级别的选项作用于IPv6协议。IPPROTO_RM 该级别的选项作用于可靠的多播传输。IPPROTO_UDP 该级别的选项适用于数据报套接字。IPPROTO_TCP 该级别的选项适用于流式套接字。3.选项的概念相当于属性,所以套接字选项也可说是套接字属性。1.设置套接字的选项对套接字进行控制。2.除了设置选项外,还可以获取选项。
2023-09-17 12:32:16 83
原创 l8-d17 多路复用epoll函数族
*创建epoll句柄*///size参数实际上已经被弃用/*epoll句柄的控制接口*//*等待 epoll 文件描述符上的 I/O 事件*/epfd: epoll 专用的文件描述符,epoll_create()的返回值op: 表示动作,用三个宏来表示:EPOLL_CTL_ADD:注册新的 fd 到 epfd 中;EPOLL_CTL_MOD:修改已经注册的fd的监听事件;EPOLL_CTL_DEL:从 epfd 中删除一个 fd;fd: 需要监听的文件描述符。
2023-09-17 11:17:57 78
原创 l8-d16 多路复用poll函数
int fd;/* 文件描述符 *//* 请求的事件 *//* 返回的事件 */nfds:fds的个数timeout:设置阻塞的时间(毫秒)0为非阻塞负数表示永久阻塞events:POLLIN:有数据可读••POLLPRI:有紧急数据需要读取•POLLOUT: 文件可写.....
2023-09-16 15:33:29 75
原创 l8-d15 IO多路复用select函数
1.select函数nfds: 是三个集合中编号最高的文件描述符,加上 1readfds/writefds/exceptfds: 可读集合/可写集合/异常集合timeout: NULL: 永久阻塞0: 非阻塞模式/* 秒 *//* 微秒 */fd_set结构体二、
2023-09-15 22:28:03 120
原创 l14 IO模型
I/O即数据的读取(接收)或写入(发送)操作通常用户进程中的一个完整I/O分为两个阶段1.用户进程空间<-->内核空间2.内核空间<-->设备空间(磁盘、网卡等)I/O分为内存I/O、网络I/O和磁盘I/O三种对于一个线程的请求调用来讲,同步和异步的区别在于是否要等这个请求出最终结果对于多个线程而言,同步或异步就是线程间的步调是否要一致、是否要协调同步也经常用在一个线程内先后两个函数的调用上异步就是一个请求返回时一定不知道结果,还得通过其他机制来获知结果,如:主动轮询或被动通知阻塞和非阻塞。
2023-09-14 20:20:28 65
原创 l8-d13 UNIX域套接字
一、UNIX 域流式套接字本地地址/* 协议类型 *//* 套接字文件路径 */UNIX 域流式套接字的用法和 TCP 套接字基本一致,区别在于使用的协议和地址不同UNIX 域流式套接字服务器端流程如下:(1)创建 UNIX 域流式套接字。(2)绑定本地地址(套接字文件)。(3)设置监听模式。(4)接收客户端的连接请求。(5)发送/接收数据。UNIX 域流式套接字客户端流程如下。(1)创建 UNIX 域流式套接字。(2)指定服务器端地址(套接字文件)。(3)建立连接。
2023-09-11 20:12:04 495
原创 l8-d12 IP协议与ethernet协议
一、IP协议作用和意义一、IP协议作用和意义分组在互联网中的传送分组传输路径二、IP 数据报首部格式1.IP 数据报的格式——占 4 位,指 IP 协议的版本。目前的 IP 协议版本号为 4 (即 IPv4)。——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节。——占 8 位,用来获得更好的服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段。
2023-09-10 23:31:05 195
原创 l8-d11 TCP连接管理与UDP协议
TCP 建立连接的过程叫做握手。采用:在客户和服务器之间交换三个 TCP 报文段,以防止已失效的连接请求报文段突然又传送到了,因而产生 TCP 连接建立错误。
2023-09-10 14:32:55 224
原创 l8-d10 TCP协议是如何实现可靠传输的
TCP 是面向连接的运输层协议,在无连接的、不可靠的 IP 网络服务基础之上提供可靠交付的服务。为此,在 IP 的数据报服务基础之上,增加了保证可靠性的一系列措施。1.TCP 是面向连接的运输层协议。每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)2.TCP 提供可靠交付的服务。3.TCP 提供全双工通信。4.面向字节流TCP 中的“流”(stream) 指的是流入或流出进程的字节序列。
2023-09-09 22:02:22 725
原创 l8-d9 UDP通信实现
函数原型:前三个参数同read/write一样;常见flags:1. 一般设置为02. MSG_PEEK:窥视传入的数据。数据被复制到缓冲区中,但不会从输入队列中删除。3. MSG_OOB:处理带外(OOB)数据。
2023-09-08 15:07:18 344
原创 l8-d7 实现TCP通信
domain: 指定通信域(通信地址族);-type: 指定套接字类型;-protocol: 指定协议;套接字类型与协议-type: 指定套接字类型TCP唯一对应流式套接字,所以选择-protocol: 指定协议流式套接字唯一对应TCP,所以无需要指定协议,设为即可bind函数与通信结构体-sockfd:socket函数生成的套接字-addr:通信结构体-addrlen:通信结构体的长度IPv4地址族结构体/* 地址族: AF_INET *//* 网络字节序的端口号 */
2023-09-05 22:55:28 391
原创 l8-d6 socket套接字及TCP的实现框架
*创建套接字*//*绑定通信结构体*//*监听套接字*//*处理客户端发起的连接,生成新的套接字*//*向服务器发起连接请求*/三元组【IP地址,端口,协议】IP地址:标识计算机端口号:标识计算机当中的进程协议:指定数据传输的方式地址族结构体//通用地址族结构体AF_UNIX 使用本地域套接字的地址结构,用于本地通信AF_INET 使用IPv4的通信地址结构AF_INET6 使用IPv6的通信地址结构....//IPv4。
2023-09-04 21:06:36 718
原创 l8-d5 字节序
IP地址可能会存在“点分十进制”的字符串形式,转换之前需要注意。小端字节序(Little endian)网络字节序转主机字节序以后通常需要转换成“点分十进制”字节序是指多字节数据在计算机内存中存储或者网络传输时。大端字节序 (Big endian)网络通信当中必须使用大端字节序。主机字节序一般采用小端字节序。一、主机字节序和网络字节序。一、主机字节序和网络字节序。示例:0x11223344。一般主机当中使用小端字节序。三、IP地址字节序转换函数。
2023-09-03 20:59:25 95
原创 l8-d4 IP地址与端口号
一、分类IP一、分类IP1.IP 地址及其表示方法例:2.IP 地址采用 2 级结构3.分类的 IP 地址任意一个IP地址我们都可以迅速的得出类别,并计算得出网络号当一个主机通过两个网卡同时连接到两网络时,也就是该主机同时拥有两个IP地址,该主机被称为一个路由器至少连接到两个不同的网络,一个路由器至少拥有两个IP地址注意:A 类网络地址中, 网络号 0 和 127 是保留地址,不指派。0 表示“本网络”,127 保留作为本地环回测试地址。
2023-09-03 17:46:09 366
原创 l7 Flappy Bird
为了能够使用Ncurses库,必须在源程序中将#include<curses.h>包括进来,而且在编译的需要与它链接起来.是curses模式的入口。将终端屏幕初始化为curses模式,为当前屏幕和相关的数据结构分配内存。是curses模式的出口,退出curses模式,释放curses子系统和相关数据结构占用的内存。注:curses有自己的字符类型chtype,使用时强制类型转换为char。设置颜色属性,设置完颜色对,可以通过COLOR_PAIR实现。将光标移动到new_y所指定的行和new_x所指定的列。
2023-08-30 21:13:59 60
原创 l6-d16 信号灯(信号量)
释放资源,如果没有线程阻塞在该sem上,表示没有线程等待该资源,这时该函数就对信号量的值进行增1操作,表示同类资源多增加了一个。如果至少有一个线程阻塞在该sem上,表示有线程等待资源,信号量为0,这时该函数保持信号量为0不变,并使某个阻塞在该sem上的线程从sem_wait函数中返回。// 1 : 释放资源,V操作 // -1 : 分配资源,P操作。获取资源,如果信号量为0,表示这时没有相应资源空闲,那么调用线程就将挂起,直到有空闲资源可以获取。// 要操作的信号灯的编号。
2023-08-26 22:15:16 58
原创 l6-d11 无名管道和有名管道
1.进程间通信介绍无名管道(pipe)、有名管道 (fifo)、信号(signal)、共享内存(mmap)、套接字(socket)无名管道具有如下特点:1.只能用于具有亲缘关系的进程之间的通信(父子、兄弟进程)2.单工的通信模式,具有固定的读端和写端(单向通信)3.无名管道创建时会返回两个文件描述符,分别用于读写管道4.无名管道在内存文件中不可见。
2023-08-26 11:33:12 63
原创 l6-d15 消息队列
消息队列是System V IPC对象的一种消息队列由消息队列ID来唯一标识消息队列就是一个消息的列表。用户可以在消息队列中添加消息、读取消息等消息队列可以按照类型来发送/接收消息二、消息队列使用步骤打开/创建消息队列 msgget向消息队列发送消息 msgsnd从消息队列接收消息 msgrcv控制消息队列 msgctl发送端:1申请Key2打开/创建消息队列 msgget3向消息队列发送消息 msgsnd接收端:1打开/创建消息队列 msgget。
2023-08-25 21:41:29 68
原创 l6-d13、14 信号机制
信号是在上对的一种模拟,是一种方式linux内核通过信号通知用户进程,不同的信号类型代表不同的事件Linux对早期的unix信号机制进行了扩展进程对信号有不同的缺省方式忽略信号捕捉信号按键产生系统调用函数产生(比如raise, kill)硬件异常命令行产生 (kill)软件条件(比如被0除,访问非法内存等)常用信号信号名含义默认操作SIGHUP该信号在用户终端关闭时产生,通常是发给和该终端关联的会话内的所有进程终止SIGINT该信号在用户键入INTR字符。
2023-08-24 20:45:35 71
原创 l6-d12 共享内存
功能:创建共享内存映射函数返回值:成功返回创建的映射区首地址,失败返回MAP_FAILED( ((void *) -1) ),设置errno值。
2023-08-23 00:57:03 47
原创 l6-d10 线程池及gdb调试多线程
概念:通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合必要性:我们平时创建一个线程,完成某一个任务,等待线程的退出。但当需要创建大量的线程时,假设T1为创建线程时间,T2为在线程任务执行时间,T3为线程销毁时间当T1+T3 > T2,这时候就不划算了,使用线程池可以降低频繁创建和销毁线程所带来的开销,任务处理时间比较短的时候这个好处非常显著。线程池的基本结构:1任务队列,存储需要处理的任务,由工作线程来处理这些任务2。
2023-08-19 23:04:58 65
原创 l6-d9 条件变量和线程池
应用场景:生产者消费者问题,是线程同步的一种手段。必要性:为了实现等待某个资源,让线程休眠。提高运行效率使用步骤:初始化:静态初始化//初始化条件变量//初始化互斥量或使用动态初始化生产资源线程:开始产生资源//通知一个消费线程或者//广播通知多个消费线程消费者线程:while (如果没有资源){ //防止惊群效应有资源了,消费资源。
2023-08-19 15:19:30 52
原创 l6-d8 线程的取消和互斥
1.线程通信 – 互斥临界资源一次只允许一个任务(进程、线程)访问的共享资源临界区访问临界资源的代码互斥机制mutex互斥锁任务访问临界资源前申请锁,访问完后释放锁。
2023-08-18 22:30:13 60
原创 l6-d7 线程的取消和清理
意义:随时杀掉一个线程注意:线程的取消要有取消点才可以,不是说取消就取消,线程的取消点主要是阻塞的系统调用设置取消使能或禁止设置取消类型PTHREAD_CANCEL_DEFERRED 等到取消点才取消PTHREAD_CANCEL_ASYNCHRONOUS 目标线程会立即取消。
2023-08-16 18:36:20 66
原创 l6-d6 线程的回收及内存演示
1.线程回收对于一个默认属性的线程 A 来说,线程占用的资源并不会因为执行结束而得到释放成功返回0,失败时返回错误码thread 要回收的线程对象调用线程阻塞直到thread结束*retval 接收线程thread的返回值2、线程分离成功:0;失败:错误号指定该状态,线程主动与主控线程断开关系。线程结束后(不会产生僵尸线程)/*通过线程属性来设置游离态(分离态)*/也可以:设置线程属性为分离两种方式:1 使用pthread_detach2 创建线程时候设置为分离属性。
2023-08-15 23:54:59 65
原创 l6-d5 线程的创建和参数传递
一、线程的基本特点进程有独立的地址空间Linux为每个进程创建task_struct每个进程都参与内核调度,互不影响进程在切换时系统开销大很多操作系统引入了轻量级进程LWP同一进程中的线程共享相同地址空间Linux不区分进程、线程线程特点通常线程指的是共享相同地址空间的多个任务使用多线程的好处:大大提高了任务切换的效率、避免了额外的TLB & cache的刷新线程共享资源。
2023-08-14 23:55:54 57
原创 l6-d4 GDB 调试多进程程序
父子进程都在gdb的控制之下,其中一个进程正常调试(根据follow-fork-mode来决定),另一个进程会被设置为暂停状态。只调试父进程或子进程的其中一个,(根据follow-fork-mode来决定),这是默认的模式。进程序号(1,2,3....) 切换GDB调试的进程。设置GDB跟踪调试单个进程或多个。设置GDB调试子进程。设置GDB调试父进程。显示GDB调试的进程。
2023-08-13 16:55:37 44
原创 l6-d3 守护进程
守护进程是Linux三种进程类型之一是 Linux 中的后台服务进程是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件始终在后台运行独立于任何终端周期性的执行某种任务或等待处理特定事件进程组(Process Group): 进程集合,每个进程组有一个组长(Leader),其进程 ID 就是该进程组 ID。会话(Session): 进程组集合,每个会话有一个组长,其进程 ID 就是该会话组 ID。
2023-08-13 16:38:50 50
原创 l6-d2 exec函数族
exec函数族进程调用exec函数族执行某个程序进程当前内容被指定的程序替换实现让父子进程执行不同的程序父进程创建子进程子进程调用exec函数族父进程不受影响。
2023-08-13 15:32:44 41
原创 l6-d1 进程的创建和回收
程序存放在磁盘上的指令和数据的有序集合(文件)静态的进程执行一个程序所分配的资源的总称进程是程序的一次执行过程动态的,包括创建、调度、执行和消亡程序位于硬盘ROM中,进程位于内存RAM中。BSS段:BSS段通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。数据段:数据段通常是指用来存放程序中已初始化的全局变量的一块内存区域。代码段:代码段通常是指用来存放程序执行代码的一块内存区域。
2023-08-12 12:07:45 49
原创 l5-d10 静态库和动态库的使用
库是一个二进制文件,包含的代码可被程序调用标准C库、数学库、线程库…… 库有源码,可下载后编译;也可以直接安装二进制包 /lib /usr/lib库是事先编译好的,可以复用的代码。在OS上运行的程序基本上都要使用库。使用库可以提高开发效率。Windows和Linux下库文件的格式不兼容Linux下包含静态库和共享库。
2023-08-09 11:25:09 42
原创 l4-d1 数据结构引入
根据数据元素的特殊字段(称为关键字key),计算数据元素的存放地址,然后数据元素按地址存放。数据即信息的载体,是能够输入到计算机中并且能被计算机识别、存储和处理的符号总称。存储结构是通过计算机语言所编制的程序来实现的,因而是依赖于具体的计算机语言的。数据结构中元素之间的关系在计算机内部很大程度上是通过地址或指针来建立的。在存储数据的同时,建立一个附加的索引表,即索引存储结构=数据文件+索引表。(2)数据的存储结构:顺序、链式、索引、散列存储;(3)数据的运算:检索、排序、插入、删除、修改等。
2023-08-08 22:50:43 28
原创 l5-d9 目录操作和文件属性获取
opendir函数用来打开一个目录文件:使用文件描述符,要配合open函数使用DIR是用来描述一个打开的目录文件的结构体类型成功时返回目录流指针;出错时返回NULLreaddir函数用来读取目录流中的内容:struct dirent是用来描述目录流中一个目录项的结构体类型包含成员char d_name[256] 参考帮助文档成功时返回目录流dirp中下一个目录项;出错或到末尾时时返回NULLclosedir函数用来关闭一个目录文件:成功时返回0;出错时返回EOF。
2023-08-08 15:56:26 69 1
原创 l4-d2、d3 线性表之顺序表
线性表是包含若干数据元素的一个线性序列 记为: L=(a0, ...... ai-1, ai, ai+1 ...... an-1)L为表名,ai (0≤i≤n-1)为数据元素;n为表长,n>0 时,线性表L为非空表,否则为空表。线性表L可用二元组形式描述:L= (D,R)即线性表L包含数据元素集合D和关系集合R关系符在这里称为有序对表示任意相邻的两个元素之间的一种先后次序关系ai是ai+1的直接前驱, ai+1是ai的直接后继设有一个顺序表L={1,2,3,4,5,6}
2023-08-07 17:25:59 88 1
原创 l5-d8 文件IO
1.什么是文件I/O?posix(可移植操作系统接口)定义的一组函数不提供缓冲机制,每次读写操作都引起系统调用核心概念是文件描述符访问各种类型文件Linux下, 标准IO基于文件IO实现2.文件描述符每个打开的文件都对应一个文件描述符。文件描述符是一个。Linux为程序中每个打开的文件分配一个文件描述符。文件描述符从0开始分配,依次递增。文件IO操作通过文件描述符来完成。0, 1, 2 的含义?
2023-08-06 16:36:45 46
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人