- 博客(45)
- 收藏
- 关注
原创 进程间通信的方式
现代操作系统,对于内存管理,采用的是虚拟内存技术,也就是每个进程都有自己独立的虚拟内存空间,不同进程的虚拟内存映射到不同的物理内存中。所以,即使进程 A 和 进程 B 的虚拟地址是一样的,其实访问的是不同的物理内存地址,对于数据的增删查改互不影响。Linux内核的进程控制块PCB是一个结构体, task struct,除了包含进程id,状态,工作目录,用户id,组id, 文件描述符表,还包含了信号相关的信息,主要指阻塞信号集和未决信号集。这一时刻往往非常短暂。也有本地套接字来完成本地进程间的通信。
2024-10-28 08:11:36 922
原创 进程与线程知识详解
在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中的第一个进程执行,即先来先服务的原则,但是仅能运行一个时间片。在每次进行作业调度时,先计算后备队列中每个作业的响应比,从中选出响应比最高的作业投入运行。在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最高的一个或几个作业,将他们调入内存,分配必要的资源,创建进程并放入就绪队列。③对于长作业,作业的响应比可以随等待时间的增加而提高,等待时间足够长时,其响应比便可升到很高,从而可以获得处理机,不会饿死。
2024-09-27 08:38:28 961 1
原创 HTTP 1.0 2.0 3.0详解
HTTP全称超文本传输协议,是一种属于应用层的通信协议。它允许将超文本标记语言文档(HTML)从Web服务器传输到客户端的浏览器。
2024-09-25 15:45:30 1324
原创 I/O多路复用详解
自旋锁就是获取不到等到一段时间循环加锁。epoll是linux 内核实现IO多路复用的一个接口,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。主进程fork出多个子进程,如果多个进程/线程阻塞在监听同一个 listening socket fd 的 epoll_wait 上,当有一个新的连接到来时,所有的进程都会被唤醒。当epoll_wait检测到描述符事件发生并将此事件通知应用程序,应用程序可以不立即 处理该事件。
2024-09-19 14:14:25 1113
原创 linux下的Socket网络编程教程
Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+端口号”就对应一个socket。
2024-09-06 10:29:39 1574
原创 计算机网络八股文之TCP协议
三次握手才可以避免建立多个连接(相对两次)三次握手才可以同步双方的初始序列号,MSS,窗口大小等信息,两次握手最多建立一个单向的连接。三次握手才可以避免资源浪费相对于四次握手而言,减少了连接次数;相对于两次,避免了冗余连接。
2024-09-05 11:31:10 1220
原创 debian11配置开机脚本
在低版本的debian系linux系统中,增加开机自启脚本比较简单,直接修改/etc/rc.local文件,在exit 0之前增加需要运行的脚本即可。但是现在在高版本的linux中默认没有开启该功能,接下来我们通过设置来开启该功能。在该目录下,可以发现有个rc-local.service文件,使用文本编辑器,在最后加上下列信息即可。首先,我们到/lib/systemd/system目录下。
2024-09-03 13:56:23 358
原创 qt4.8.7编译中出现const void* 禁止转换为void *
【代码】qt4.8.7编译中出现const void* 禁止转换为void *
2024-09-02 09:05:56 279 2
原创 hostapd启动wifi的wpa加密报错:Not enough entropy in random pool
【代码】hostapd启动wifi的wpa加密报错:Not enough entropy in random pool。
2024-08-02 17:37:58 276
原创 配置8188eu无线网卡的热点模式
关于这一驱动,不要下载master分支,master分支代码较早,会导致以下两点问题:1.STA模式下连接wifi信号较差时会卡死2.无法启动AP模式所以请务必下载5.2.2.4分支中的内容。
2024-08-01 13:11:56 555
原创 Qt执行Linux命令的几种实现
这种方法比较快捷,直接将参数-l作为整体执行,随后读取输出结果。但这种方法可能会比较稳妥的是第二种方法。这种方法能够有效地传递参数给执行程序。
2024-07-27 15:12:12 423
原创 Makefile中的CFLAGS,CPPFLAGS,LDFLAGS,LIBS
【代码】Makefile中的CFLAGS,CPPFLAGS,LDFLAGS,LIBS。
2024-07-24 09:41:27 349
原创 嵌入式Linux根目录文件夹讲解
在 Linux 下一切皆文件,即使是硬件设备,也是以文件的形式存在的,比如/dev/ttymxc0(I.MX6ULL 根目录会有此文件)就表示 I.MX6ULL 的串口 0,我们要想通过串口 0发送或者接收数据就要操作文件/dev/ttymxc0,通过对文件/dev/ttymxc0 的读写操作来实现串口0 的数据收发。临时挂载目录,一般是空目录,可以在此目录下创建空的子目录,比如/mnt/sd、/mnt/usb,这样就可以将 SD 卡或者 U 盘挂载到/mnt/sd 或者/mnt/usb 目录中。
2024-07-23 17:01:29 378
原创 Linux内核编译一般流程
⑤、修改相应的驱动,像 NAND Flash、 EMMC、 SD 卡等驱动官方的 Linux 内核都是已经提供好了,基本不会出问题。⑥、 Linux 内核启动以后需要根文件系统,如果没有根文件系统的话肯定会崩溃,所以确定 Linux内核移植成功以后就要开始根文件系统的构建。③、使用参考板子的 zImage 文件和.dtb 文件在我们所使用的板子上启动 Linux 内核,看能否启动。①、在 Linux 内核中查找可以参考的板子,一般都是半导体厂商自己做的开发板。
2024-07-23 16:51:27 297
原创 嵌入式安装8188eu无线usb的wifi驱动
品牌:Realtek Semiconductor型号:CF-WU810N芯片:8188eu开发板芯片:AM335XLinux内核版本:3.2.0输入lsusb,查看usb信息:若型号不为0bda:8179,则需要使用usb_modswitch工具来切换模式,因为linux会把usb设备默认识别成大容量存储设备,wifi驱动安装之后无法匹配。usb_modswitch的配置请关注本专栏另一篇文章。
2024-07-23 15:18:00 985
原创 Linux驱动运行的两种方式
在调试驱动的时候一般都选择将其编译为模块,这样我们修改驱动以后只需要编译一下驱动代码即可,不需要编译整个 Linux 代码。而且在调试的时候只需要加载或者卸载驱动模块即可,不需要重启整个系统。总之,将驱动编译为模块最大的好处就是方便开发,当驱动开发完成,确定没有问题以后就可以将驱动编译进 Linux 内核中,当然也可以不编译进 Linux 内核中,具体看自己的需求。
2024-07-17 16:57:54 256
原创 -std=c++0x 是什么c++标准?
更清晰地表明你的意图,即使用 C++11 标准的语言特性和改进。在某些旧版的编译器中,可能仍然支持。作为对 C++11 标准的支持,但推荐使用更明确的。
2024-07-16 18:49:45 205
原创 arm-linux-gnueabi-gcc 和 arm-linux-gnueabihf-gcc
其实这两个交叉编译器只不过是 gcc 的选项 -mfloat-abi 的默认值不同。两个交叉编译器分别适用于 armel 和 armhf 两个不同的架构,armel 和 armhf 这两种架构在对待浮点运算采取了不同的策略(有 fpu 的 arm 才能支持这两种浮点运算策略)。
2024-07-15 17:50:07 324
原创 离线安装Qt 6.7的方法
首先在有网络的电脑上在线安装Qt6.7 其次将qt的安装包拷贝到离线电脑上 运行tool文件夹下的qcreator,可能会报如下错误: 该错误是由于路径不对导致的,将离线电脑的qt路径修改成和原电脑路径一致。 点击运行,运行成功! 若出现VCRruntime.dll报错,则需要安装一下microsoft_visual_c++ 的库即可。
2024-05-03 16:39:05 2049
原创 Qt实现OpenGL的经典教程④——加载纹理补充
本帖将参考LearnOpenGL这一经典教程,使用Qt的原生环境完成教程中所提的所有流程,并尽量和原教程保持一致,如有错误,欢迎评论!为了方便大家参考,我将项目分享至了gitee,并实时进行更行:Qt实现OpenGL的经典教程: (gitee.com)教程中文网站:LearnOpenGLCN 教程原网站:LearnOpenGLQt版本:6.7操作系统:Windows10突然发现纹理加载这一章还有两个内容没写,这里补充一下。在上一篇文章的代码上对片段着色器进行修改,使其混合颜色:点击运行后,我们便能得
2024-04-17 15:27:58 520
原创 Qt实现OpenGL的经典教程③——加载纹理
qt封装了QOpenGLBuffer和QOpenGLVertexArrayObject来实现VBO和VAO,这里对之前的代码进行修改,使用Qt封装好的对象来实现VAO,VBO和EBO三个对象,对MyOpenGLWidget.h代码修改如下:
2024-04-17 14:04:21 1401 1
原创 Qt实现OpenGL的经典教程②——你好,三角形
上一篇文章中,我们继承了QOpenGLFunctions来实现gl.h中的窗口,但是在编写新一章内容时,我发现继承QOpenGLFunctions所提供的函数标准是OpenGL2.0,这导致一些函数无法使用,比如glBindVertexArray()等,而LearnOpenGL所使用的标准是3.3。这里为了保持统一,对自定义的myOpenGLWidget做出如下修改,继承QOpenGLFunctions_3_3_Core而非QOpenGLFunctions。
2024-04-17 12:03:52 1657
原创 Qt实现OpenGL的经典教程①——创建窗口
本帖将参考LearnOpenGL这一经典教程,使用Qt的原生环境完成教程中所提的所有流程,并尽量和原教程保持一直,如有错误,欢迎评论!Qt版本:6.7操作系统:Windows10。
2024-04-16 16:02:08 3020 3
原创 Unity代码控制粒子运动轨迹路径极简代码!
不说废话直接上代码,使用方法就是添加到粒子系统的Object下的脚本,然后在nodes中添加位置就可以了!
2023-12-30 15:14:29 1068 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人