- 博客(49)
- 收藏
- 关注
原创 linux与windows下路径问题
Linux没有盘符这个概念, 只有一个根目录 /, 所有文件都在它下面。在Windows系统中,路径之间的层级关系,使用: \ 来表示。Windows系统有多个顶级目录,即各个盘符。
2024-08-07 15:06:44
319
原创 IO多路复用——select
仅一个线程、进程处理并发跨平台适用linux,windows 底层:线性表适用linux 底层:线性表适用linux 底层:红黑树(效率高)
2024-07-26 19:54:21
847
原创 SOCKET通信阻塞问题解决方案
如果需要和发起新的连接请求的客户端建立连接,那么就必须在服务器端通过一个循环调用accept()函数,另外已经和服务器建立连接的客户端需要和服务器通信,发送数据时的阻塞可以忽略,当接收不到数据时程序也会被阻塞,这时候就会非常矛盾,被accept()阻塞就无法通信,被read()阻塞就无法和客户端建立新连接。accept():如果服务器端没有新客户端连接,阻塞当前进程/线程,如果检测到新连接解除阻塞,建立连接。write():如果通信的套接字写缓冲区被写满了,阻塞当前进程/线程(这种情况比较少见)
2024-07-25 21:29:45
565
原创 socket通讯
返回值:调用connect后,会自动随机给socket()绑定一个没有被占用的端口,如果要自己指定,写在socket()和connect()中间。2.如果有N个客户端和服务器建立了新的连接, 通信的文件描述符就有N个,每个客户端和服务器都对应一个通信的文件描述符。等待并接受客户端的连接请求, 建立新的连接, 会得到一个新的文件描述符(通信的),没有新连接请求就阻塞。2.不负责和客户端通信, 负责检测客户端的连接请求, 检测到之后调用accept就可以建立新的连接。网络通信相当于网络IO。
2024-07-25 09:18:29
311
原创 linux下如何查看某软件是否已安装/安装位置
3、yum方法安装的,可以用yum list installed查找,如果是查找指定包,命令后加 | grep “软件名或者包名”;1、rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”。2、以deb包安装的,可以用dpkg -l能看到。如果是查找指定软件包,用dpkg -l | grep “软件或者包的名字”;4、如果是以源码包自己编译安装的,例如.tar.gz或者tar.bz2形式的,这个只能看可执行文件是否存在了,
2024-07-16 13:55:53
1254
原创 Linux内核学习记录
Linux内核将不同功能的外部设备,例如Disk设备(硬盘、磁盘、NAND Flash、Nor Flash等)、输入输出设备、显示设备等等,抽象为可以通过统一的文件操作接口(open、close、read、write等)来访问。另外,内存管理会提供虚拟内存的机制,该机制可以让进程使用多于系统可用Memory的内存,不用的内存会通过文件系统保存在外部非易失存储器中,需要使用的时候,再取回到内存中。内核空间是 Linux 操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。
2024-07-16 13:53:30
302
原创 WARNING: Logging before InitGoogleLogging() is written to STDERR 解决办法
可能原因是在调用Glog进行信息纪录前未对Glog进行构造,Glog未能在初始化时检索到日志文件存储路径等信息。调用Glog初始化构造即可。
2024-07-16 11:13:06
606
原创 windows下使用#include <nlohmann/json.hpp>
3.修改工程属性:在Visual Studio中,打开项目属性,找到“C/C++”选项下的“附加包含目录”,将刚才拷贝的include文件夹的路径添加进去。1.下载并解压:首先,需要从nlohmann/json的GitHub仓库下载源代码,并解压得到的文件。2.拷贝头文件:解压后,会得到一个名为include的文件夹,将该文件夹下的所有文件拷贝到的工程文件夹下。
2024-07-16 10:27:14
1527
原创 opencv窗口嵌入qt
opencv捕获摄像头数据并进行图像处理后,显示在qt窗口上。显示在QLabel控件cameraView上。将Mat转成QImage格式。
2024-07-15 16:44:14
223
原创 vim使用记录
粘贴:在想要粘贴的地方按下p 键【将粘贴在光标所在行的下一行】,如果想粘贴在光标所在行之前,则使用P键。如果一个文件在编辑时没有名字,则可以使用:wq 文件名称,代表把当前正在编辑的文件保存到指定的名称中,然后退出。③ 针对整个文档中的所有行进行替换,只替换每一行中满足条件的第一个结果。:s/要替换的关键词/替换后的关键词/g g=global全局替换。② 替换光标所在这一行中的所有满足条件的结果(替换多次,只能替换一行)① 只替换光标所在这一行的第一个满足条件的结果(只能替换1次)
2024-07-15 14:50:18
840
原创 [编译报错]configure: error: cannot guess build type; you must specify one
/configure --build=arm-linux 指定架构。
2024-07-11 10:37:25
301
原创 [arm版qt编译报错]57:10: fatal error: charconv: No such file or directory #include <charconv>
gcc版本过低导致charconv: No such file or directory。
2024-07-11 10:34:43
709
原创 引用&常用用法
所做的任何修改都会反映到原始向量上。这是因为引用提供了对原始对象的间接访问。作为参数传递给函数时,实际上发生的是向量的拷贝。传递std::vector<UpdateItem> items;修饰符确保函数内不能修改传入的字符串,保护数据不被意外更改。)可以避免在函数调用时复制整个字符串,从而提高性能。:使用引用传递(尤其是对于大型数据结构,如。
2024-07-11 09:48:56
246
原创 [install报错]The package code needs to be reinstalled, but I can‘t find an archive for it.
打开 /var/lib/dpkg/status 文件, 查找安装未成功的安装包,譬如搜索关键子 “half” ,将安装包相关信息删除。然后重新安装一下安装包即可。
2024-07-10 10:24:20
442
原创 CMake多版本控制
个人的理解:当我们在使用CMake这个工具的时候,系统会找到这个路径下的CMake,那么这个路径下应该就是我们原本的CMake。我们把他删除了之后,将pip安装的CMake软链接到这个路径下,这里的软链接我们可以理解为是创建了一个快捷方式。就可以安装多个CMake版本,在切换版本的时候只需要重新软链接我们需要的版本就可以了。
2024-07-09 14:51:50
427
原创 [报错]dpkg: error processing package code (--install): dependency problems - leaving unconfiguredPro
执行sudo dpkg -i code_1.90.2-1718750608_arm64.deb。出现这个错误的原因是之前安装软件的时候出现中断情况,或者你强行终止安装导致不完全的安装。
2024-07-09 08:11:38
1826
原创 opoencv踩坑记录
,OpenCV 会尝试使用默认的接口来访问摄像头。在大多数情况下,这应该是足够的,但如果遇到问题,你可以尝试显式地指定。设置为cv::VideoCapture cap(device, cv::CAP_V4L2);cv::VideoCapture cap(device)画面会卡住。如果没有指定捕获接口(即直接使用。来确保使用 V4L2 接口。
2024-07-07 18:07:13
195
原创 [sqlite报错]Errors were encountered while processing: nvidia-l4t-bootloaderE: Sub-process /usr/bin/d
【代码】[sqlite报错]Errors were encountered while processing: nvidia-l4t-bootloaderE: Sub-process /usr/bin/d。
2024-07-04 13:58:57
187
原创 线程同步线程互斥
线程互斥在多线程环境中运行的代码段,需要考虑是否存在竞态条件,如果存在竞态条件,我们就说该代码段不是线程安全的,不能直接运行在多线程环境当中,对于这样的代码段,我们经常称之为临界区资源,对于临界区资源,多线程环境下需要保证它以原子操作执行,要保证临界区的原子操作,就需要用到线程间的互斥操作-锁机制,thread类库还提供了更轻量级的基于CAS操作的原子操作类。存在竞态条件的代码段(临界区代码段):代码在多线程的环境下执行,随着线程调度顺序不同,结果不同。----->原子操作。
2024-07-03 21:17:41
151
原创 GDB指令
💜d(delete) + 当前要删除断点的编号 —— 删除一个断点【不可以d + 行号】💜disable b(breakpoint) + 编号 —— 使一个断点无效【禁用断点】💜c(continue) —— 从一个断点处,直接运行至下一个断点处【VS下不断按F5】💜enable b(breakpoint) + 编号 —— 使一个断点有效【开启断点】💜enable b(breakpoints) —— 使所有断点有效【默认缺省】💜r(run) —— F5【无断点直接运行、有断点从第一个断点处开始运行】
2024-07-03 16:30:47
594
原创 sdk外部库链接问题
在使用百度云sdk过程中,遇到一个奇怪的问题,imshow调用错误,提示缺少两个依赖,但查看环境发现已经安装,检查发现,sdk中的third_partybufen的opencv2导致。我的环境本身的opencv可以正常使用,加载图像,直接用安装好的opencv库替换sdk中的opencv,报一样的错。直接删除sdk中opencv包,在cmake里find搜索ubuntu已安装的opencv,成功解决。
2024-07-03 15:43:23
96
原创 是否设计为多线程参考(CPU密集,I/O密集)
并发,cpu单核串行I/O操作,就是将数据写入或从内存输出的过程,也指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。常见IO流操作,一般指内存与磁盘间的输入输出流操作。
2024-07-02 20:41:00
306
原创 dpkg: error processing package ***(--install): dependency problems - leaving unconfigured
sudo apt install -f
2024-07-02 16:45:38
546
原创 静态库和动态库
库是一组预先编译好的方法的集合,是计算机上的一类文件,提供给使用者一些开箱即用的变量、函数或类。库文件分为静态库和,静态库和动态库的区别体现在程序的链接阶段。Linux的静态库扩展名是 .a,静态库文件名的命名规范是以 lib 为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将创建的静态库名为mian,则静态库文件名就是libmain.a。动态库扩展名是 .so编译后的库文件的源代码被加密,使用者看不到,可保密。Linux库有两种,一种是静态库,其命令规则为 libxxx.a;
2024-06-27 13:41:46
233
原创 bash: pip: command not found
bash: pip: command not foundpip install opencv-contrib-python-> pip3 install opencv-contrib-pythonpython3 -m pip --version pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6) python --versionPython 2.7.17
2024-06-27 11:27:22
111
原创 常用通讯协议
是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通讯方式。发送数据接收数据的过程 串口控制器管理,其提供寄存器自己设置波特率,传递位数等。通用异步收发器,串行,异步。异步:收发双方时钟不同步。
2024-06-27 10:05:54
139
原创 gcc, g++使用记录
(3)编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。(1)gcc与g++都可以编译c代码与c++代码。但是:后缀为.c的,gcc把它当做C程序,而g++当做是C++程序;(2)编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接。选项,默认生成的可执行文件名为。
2024-06-26 20:26:38
226
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人