自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 非阻塞IO(IO多路复用)

/增加非阻塞属性 //flag = flag & ~O_NONBLOCK;4.select只能工作在水平触发模式(低速模式)无法工作在边沿触发模式(高速模式)4.poll只能工作在水平触发模式(低速模式)无法工作在边沿触发模式(高速模式)2.select监听的文件描述符集合在用户层,需要应用层和内核层互相传递数据。3.epoll会直接获得产生事件的文件描述符的信息,而不需要遍历检测。nfds:监测的文件描述符上限值(最大文件描述符的值+1)

2024-08-07 20:10:41 846

原创 HTTP协议

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常。HEAD 请求获取由Request-URI所标识的资源的响应消息报头。404 Not Found //请求资源不存在,eg:输入了错误的URL。OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求。DELETE 请求服务器删除Request-URI所标识的资源。4xx:客户端错误--请求有语法错误或请求无法实现。5xx:服务器端错误--服务器未能实现合法的请求。

2024-08-02 21:02:03 347

原创 网络通信协议——TCP

2. 对于变长的包,还可以在包和包之间使用明确的分隔符,这个分隔符是由程序员自己来定的,只要保证分隔符不和正文冲突即可。(3)超时重传:当发送端发送的数据在网络中丢失时,在一定时间内没有收到接收端的ACK,则发送端会重新发送丢失数据。这样对方就可以控制发送数据的速度,从而达到流量控制,16bit,因而窗口最大65535.TCP协议是面向字节流的协议,接收方不知道消息的界限,不知道一次提取多少数据,这就造成了粘包问题。(1)滑动窗口:可以按照“窗口大小”, 一次发送多条后, 再等待应答。

2024-08-01 20:44:38 283

原创 网络体系结构及通信协议(UDP)

2.不安全不可靠的协议 //一般用在实时性比较高的广播,组播//vnc。私有IP地址:172.16.0.0 - 172.31.255.255。HTTP:超文本传输协议(实现超文本(集视频、图片、文字于一体的文件类型)传输)

2024-08-01 20:43:22 723

原创 进程间通信——共享内存(ipc)

IPC_CREAT 创建 (低9个bits表示用户,同组用户,其他人的权限)参数:pathname 路径 ,任意路径,只要不会被删除即可。proj_id 代号,整形的数据,一般用ASCII码的单字符表示。获取key值 ==》申请对象(创建共享内存) ==》映射对象==》读写数据。shmaddr 本地可用的地址,如果不确定则用NULL,表示。功能:修改共享内存属性,也可以删除指定的共享内存对象。ipcs -a 查询共享内存,信号量集,消息队列。==》撤销映射 ==》删除对象。

2024-07-31 09:06:34 290

原创 进程间通信(IPC)

可以,取决于pipe有没有内容,===>read返回值为0 不阻塞。注册一个信号-(接收方)---》发送信号------》处理(注册的信号处理函数)读: read(fd-read,buff,sizeof(buff));(可4096的写入)当输入#quit时退出(子正常结束,父再写入时,管道破裂结束)不可以 ===>SIGPIPE 异常终止。无名管道 ===》pipe ==》只能给有亲缘关系进程通信。有名管道 ===》fifo ==》可以给任意单机进程通信。pipefd[1] ==>无名管道的固定写端。

2024-07-30 20:06:00 385

原创 线程控制:互斥与同步

死锁: 死锁指的是在多线程环境中,每个执行流(线程)都有未释放的资源,且互相请求对方未释放资源,从而导致陷入永久等待状态的情况。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放(执行流本身使用着一把锁并不释放,还在请求别的锁)。如:线程A获取了1锁,线程B获取了2锁,同时线程A还想获取2锁,线程B还想获取1锁。信号量的定义 ===》信号量的初始化 ==》信号量的PV操作===》信号量的销毁。互斥机制 ===》互斥锁 ===》解决多线程操作共享空间引发的资源竞争问题。

2024-07-20 20:00:10 411

原创 线程的概念

===》主进程结束任意生成的次线程都会结束。(因为共享的进程空间被回收了)。1.线程结束后空间自动被操作系统回收,无需调用回收线程的接口函数。1)可结合性:能被其他线程回收和杀死的线程具有可结合性,在没有被其他线程回收之前,其资源不释放;2)分离属性:不能被其他线程回收和杀死的线程具有分离属性,其存储资源在终止时被系统自动释放。====》次线程的正常结束不会影响主线程的运行。1、线程的结束机制 ====》不同于进程没有孤儿线程和僵尸线程。进程中的每个线程,栈区是独立的,共享进程中的数据区和文本区,堆区。

2024-07-20 19:56:31 305

原创 进程的学习

孤儿进程:当前进程的父进程结束,当前进程称为孤儿进程,父进程会变成systemd(进程组组长)2.让父进程先结束,子进程后结束,产生孤儿进程,由操作系统帮忙回收资源。子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。2.进程:是一个程序动态执行的过程,包括创建、调度、消亡(动态的)动态生成n个子进程,并打印输出各自进程的pid号。父进程:创建新进程的进程称为新进程的父进程。克隆的进程称为子进程,原有的进程称为 父进程。子进程:被创建的进程称为原进程的子进程。4.下面程序一共生成几个进程。

2024-07-20 09:12:45 395

原创 linux操作系统软件编程

* time of last status change */(*最后的状态改变的时间)/* time of last access */ (*最后访问的时间)/* time of last modification */ (*最后修改的时间)/* user ID of owner */ (*UID 用户id)/* total size, in bytes */(*文件的大小)//软链接 --- lstat 获取软链接这个链接文件本身的属性信息,而不是连接到的目标文件的属性信息。

2024-07-16 20:41:45 805

原创 嵌入式学习第十五天

由于频繁申请和释放,导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间(空间不连续),将这样的空间称为内存碎片。3.malloc需要和free搭配使用,如果只有malloc没有free会内存泄露。2.一个空间只能被free一次,多次free程序会崩溃。size:申请堆区空间的大小。1.free只能释放堆区空间。程序中malloc的空间没有被释放。返回获得的空间的首地址。内存溢出也称为内存越界。

2024-01-31 20:37:49 165 1

原创 嵌入式学习第十四天

> 右移 右移n位 等价于 让该数 / 2^n。<< 左移 左移n位 等价于 让该数 * 2^n。1.枚举类型一般说明将来变量的值在给定的常量中选择其一作为它的值。2.枚举常量的值总是前一个枚举常量的值+1,第一个默认为0值。char 按照1字节对齐。short 按照2字节对齐。内存低地址存放低数据位。内存高地址存放高数据位。内存低地址存放高数据位。内存高地址存放低数据位。数据类型1 成员变量1;数据类型2 成员变量2;数据类型3 成员变量3;

2024-01-30 18:16:30 143 1

原创 嵌入式学习第十三天

局部变量的地址不能返回,因为局部变量会随函数作用域结束被回收,虽然能够获得返回的地址,但地址对应的空间已经被回收过了。void *转换为int *、double *、char *不需要强制类型转。2.函数体内想修改函数体外指针变量值的时候,要传递指针变量的地址即二级指针。以上两种格式,指针变量的值无法改变,也不能改变其指向那个空间中的值。以上两种指针的地址空间可以改变,但是所指向空间中的值无法改变。第三种格式,所指向空间中的值可以改变,但是指向的地址无法改变。指针函数:是函数,函数的返回值类型是指针类型。

2024-01-29 18:44:33 663

原创 嵌入式学习第十二天

指针数组主要用来操作字符串数组,通过将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作。二维数组主要用来存储字符串数组,通过每行存储一个字符串,多行存储多个字符串所组成的数组。二维数组的数组名是指向数组第一行元素的数组指针。

2024-01-27 18:33:32 248

原创 嵌入式学习第十一天

定义一个数组指针变量,占8个字节空间,指针指向了一个int类型5个元素的数组。定义一个指针数组,数组占40个字节空间,每个元素为int *型,共5个元素。对数组指针*,值不变,类型降级成为指向数组第一个元素的指针。对一维数组数组名&,值不变,类型升级为数组指针类型。&a:获得数组的首地址,其类型为int (*)[5]数组的数组名a是指向数组第一个元素的一个指针常量。a 的类型可以理解为 int *指针数组时数组,数组每个元素都是指针类型。1.sizeof运算时。数组指针是指针,指针指向一个数组。

2024-01-26 20:13:12 458 1

原创 嵌入式学习第十天

2024-01-25 19:37:29 132

原创 嵌入式学习第九天

实参将值拷贝一份给形参,形参是实参的副本,形参的值发生改变不会影响实参。数组传递时,函数体内部形参操作的数组和实参操作的数组为同一数组。2.编译时开辟空间,程序运行时加载该空间。2.可以将变量的作用域限定到本文件中。函数体内部想使用函数体外部变量值的时候使用复制传递。3.执行到超过变量作用域范围回收变量空间。变量从空间被开辟到被回收的整个过程称为生存周期。变量作用域默认为离定义该变量最近的大括号内。2.执行到变量定义时开辟空间。声明一个变量为外部存储的变量。全局变量:变量作用域在整个文件中。

2024-01-24 19:09:40 395 1

原创 嵌入式学习第八天

今天上课内容进行的总结归纳如下:

2024-01-23 20:21:38 421 1

原创 嵌入式学习第七天

今天就上课内容进行了总结归纳,思维导图如下:

2024-01-22 19:56:35 352

原创 嵌入式学习第六天

数组空间存放顺序有序,先存下标为0的元素,再存下标为1的元素, ...获得数组元素个数: sizeof(a) / sizeof(a[0])数组所占空间大小 = 数据类型所占空间大小 * 元素个数。给定一部分元素的值,没有给定初值的元素,默认初始化为0。元素个数必须为常量或常量表达式,不能是变量或变量表达式。不给定数组元素个数,通过初值元素个数决定数组元素个数。元素下标:可以用变量、常量或者表达式访问。元素下标: 0 - 元素个数-1。所有数组元素都可以得到初值。1.数组:一组类型相同的有限个元素的集合。

2024-01-20 19:04:59 385

原创 嵌入式学习第五条

3.switch只与case后面的值比一次,如果相同则顺序向下执行,直到break或程序结束退出。练习:编写程序,从终端接收两个数 Num1和Num2,如果Num1 >= Num2则打印Num1。里层switch结束后如果不加break,外层switch顺序向下执行。2.case后面必须为常量,不能是变量或表达式。case 常量1:语句块1;case 常量2:语句块2;case 常量3:语句块3;} while (表达式);while (表达式)else if (表达式2)else if (表达式3)

2024-01-19 19:19:58 364 1

原创 嵌入式学习第四天

2024-01-18 19:04:50 389 1

原创 嵌入式学习第三天

今天学习了常量和变量、类型转换、运算符和常用的输入输出函数等等的一些基本的C语言知识。

2024-01-17 18:49:00 980

原创 嵌入式学习第二天

二进制、八进制、十进制、十六进制包含的数分别如下:二进制:0 1八进制:0 1 2 3 4 5 6 7十进制:0 1 2 3 4 5 6 7 8 9十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f二进制、八进制、十六进制转十进制,采用按权展开再求和的方法。十进制转二进制、八进制、十六进制,采用十进制除以进制数得到的余数逆序排列。二进制转八进制、十六进制,八进制一位对应二进制三位,十六进制一位对应二进制四位。

2024-01-16 19:03:16 2048 1

原创 在普特学习嵌入式的第一天

首先了解了Ubuntu的一些常见操作,例如挂起、关闭、重启等功能的用法,以及一些相关快捷键的使用。其中,蓝色字体为目录文件(其中存放文件),白色字体为普通文件(其中存放内容)查看当前目录下所有文件,且包含隐藏文件(文件名以 . 开头的文件)。第二组rwx: 创建文件的用户同组用户对文件是否拥有读写执行权限。第一组rwx: 创建文件的用户对文件是否拥有读写执行权限。相对路径:当前所在目录不同,登录用户不同,相对路径会产生不同的含义。绝对路径:当前所在路径不同,登录用户不同,相同路径会产生不同含义。

2024-01-15 18:52:13 586

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除