- 博客(686)
- 资源 (1)
- 收藏
- 关注
原创 视场角(FOV)
例如,GoPro等运动相机提供超宽(SuperView)、宽(Wide)、线性(Linear)等多种FOV模式,用户可以根据拍摄场景(如极限运动、城市街拍)灵活选择,在广阔视野和畸变控制之间取得平衡。Valve Index等设备通过复杂的光学设计(如可调节的镜片与眼部距离、倾斜目镜等)来尽可能提升FOV,让用户更不容易感觉到屏幕边界,从而增强沉浸体验。您可以将其想象为从镜头中心出发,形成一个圆锥形的视野,这个圆锥的顶角就是FOV。反之,FOV越小,则视野越窄,但往往能更清晰地观察远处的细节。
2026-01-18 23:12:14
536
原创 RTMP与RTSP协议
RTMP与RTSP是音视频开发的「基石协议」,RTMP侧重直播推流/拉流与协议转换,RTSP侧重安防摄像头/IPC的流控制。学习路径建议:先通过《FFmpeg入门详解》建立基础认知,再通过《RTSP协议详解与实战》《实时流媒体系统》深入协议细节,最后结合《FFmpeg开发实战》与SRS/ZLMediaKit实现项目落地。所有推荐书籍均与你的C++/嵌入式/音视频开发背景高度匹配,可帮助你高效掌握协议并应用于实际工作中。
2026-01-11 23:59:48
892
原创 SRS部署
SRS的核心优势是「简单+高性能」,从单机部署到集群扩展,从基础RTMP到超低延迟WebRTC/SRT,都能通过极简的配置和命令实现。新手建议先从Docker一键部署入手,熟悉基础推流拉流后,再逐步探索转码、协议转换、集群等进阶特性。
2026-01-11 23:38:55
840
原创 ZLMediaKit 全面详解
ZLMediaKit 是一个基于 C++11 开发的高性能、跨平台(Linux/Windows/Mac)的流媒体服务器框架,核心定位是音视频的转发、转码、推拉流、录制、播放高性能:基于 epoll/kqueue 实现的 Reactor 模型,单进程可支持上万并发连接;低延迟:RTMP/HTTP-FLV 延迟可低至 100ms 以内,WebRTC 可至 50ms 以内;易扩展:模块化设计,支持插件化开发,可快速定制业务逻辑;功能全:内置转码、录制、截图、鉴权、按需拉流等核心功能。
2026-01-07 23:49:59
914
原创 indirectly_readable和indirectly_writable这两个核心概念的具体定义和使用场景是什么?
和是 C++20 中引入的两个核心概念,它们为迭代器操作提供了基础的类型安全约束,是理解现代 C++ 范围库和算法库的关键。*i*i = val。
2026-01-07 23:41:14
397
原创 ubuntu系统_每天定时23:00 定时关机_怎么实现
在Ubuntu系统中设置每天23:00定时关机,最可靠的方法是使用系统内置的cron服务。下面的表格汇总了实现步骤和关键要点,你可以快速了解整个过程。
2026-01-07 22:21:58
317
原创 第二十一章_与网络打印机通信_《UNIX环境高级编程》_笔记
字节序转换遗漏:客户端与守护进程、守护进程与打印机之间的整数传输必须用。锁使用不当:同时持有多个互斥锁导致死锁(本章通过“逐个获取释放”避免)。协议属性缺失:IPP必需属性(如)未封装,导致打印机拒绝请求。资源泄漏:线程退出未释放套接字或文件描述符(依赖解决)。未处理HTTP/IPP响应:忽略打印机的错误状态,导致作业状态判断错误。
2026-01-03 21:54:07
918
原创 第二十章_数据库函数库_《UNIX环境高级编程》_笔记
索引文件(.idx):存储索引记录、散列表、空闲链表指针,核心作用是“快速定位数据文件中的记录”。数据文件(.dat):存储实际的键值对数据,每条记录独立存储,通过索引文件中的偏移量定位。
2026-01-03 21:14:23
832
原创 第十九章_伪终端_《UNIX环境高级编程》_笔记
主设备(master):由控制进程(如telnetd、script)操作,读写数据对应从设备的读入/输出;从设备(slave):由被控制进程(如shell、vi)操作,表现完全像物理终端,支持所有终端I/O函数(tcgetattr、tcsetattr等)。
2026-01-03 21:06:54
536
原创 第十八章_终端I/O_《UNIX环境高级编程》_笔记
口令输入:关闭回显(ECHO=0)、禁用规范模式(ICANON=0),如getpass函数;编辑器(vi):非规范模式(ICANON=0)、关闭回显(ECHO=0)、禁用特殊字符(ISIG=0窗口自适应:捕获SIGWINCH信号,动态调整输出格式;远程登录(telnet):通过termios同步本地与远程终端属性。
2026-01-03 21:02:50
631
原创 第17章_高级进程间通信_《UNIX环境高级编程》_笔记
重难点核心技术核心函数应用场景UNIX域套接字全双工通信、命名绑定同一主机高效IPC唯一连接身份验证、专属通信通道服务器-客户端安全通信传送文件描述符控制数据(SCM_RIGHTS)、msgmsg服务器打开资源,客户端直接使用open服务器描述符传递+I/O多路转接文件共享、权限控制(服务器特权打开)
2026-01-03 20:50:37
985
原创 第16章_网络IPC_《UNIX环境高级编程》_笔记
通信类型核心函数流程关键特性TCP(流)可靠、有序、面向连接UDP(数据报)不可靠、无顺序、无连接关键工具字节序转换(htons/ntohs)、地址转换(inet_pton)、套接字选项(setsockopt)解决兼容性、优化性能。
2026-01-03 20:35:51
628
原创 第15章_进程间通信_《UNIX环境高级编程》_笔记
/ 消息结构:必须以long类型开头(存储消息类型)long mtype;// 消息类型(≥1)// 消息数据IPC类型核心场景优点缺点关键函数管道(pipe)父子/兄弟进程单向通信简单、无需手动释放半双工、仅亲缘进程FIFO无亲缘关系进程通信命名访问、跨进程字节流无边界、需手动同步消息队列带类型的消息传递按类型读取、无需同步数据边界有大小限制、无引用计数信号量进程同步/互斥原子操作、支持undo机制仅同步、不传递数据共享存储大数据量高速传输。
2026-01-03 20:21:18
661
原创 第14章_高级I/O_《UNIX环境高级编程》_笔记
/ 锁类型:F_RDLCK/F_WRLCK/F_UNLCK// 偏移量基准:SEEK_SET/SEEK_CUR/SEEK_END// 起始偏移量(相对于l_whence)// 锁定长度(0表示到文件尾)// 持有锁的进程ID(仅F_GETLK返回)技术核心场景关键函数/标志注意事项非阻塞I/O不等待资源,立即返回避免轮询,搭配I/O多路转接记录锁文件并发控制按固定顺序加锁,避免死锁I/O多路转接监听多个描述符就绪状态select有描述符限制,poll更灵活。
2026-01-03 20:05:23
673
原创 科斯定理_思考_为何你或你的公司不会变得更好
核心结论:如果产权明确,而且大家商量事情不用花任何成本(不用吵架、不用花钱、信息全透明),那么不管初始产权给谁,最后都会找到最合理的解决方案。产权先明确,商量成本低,事情能办好;商量成本高,就把产权分给“用得最好”的人;改规则前先算算账,划算再改。
2026-01-03 10:03:11
788
原创 fmtlib/fmt仓库熟悉
注:README 中“Notable projects using this library”是。(如 MongoDB、PyTorch、ClickHouse 等),而非 fmt 依赖的库。
2026-01-01 23:45:57
749
原创 守护进程_第十三章_《UNIX环境高级编程(第三版)》_笔记
以上8步(含日志初始化)构成创建守护进程的标准函数,调用后即可将普通进程转为守护进程。核心逻辑是「脱离终端→独立会话→释放资源→保证权限」,每一步都不可省略,否则会导致守护进程不稳定。7步标准创建流程(两次fork+setsid+资源清理)是基础;syslog日志机制是守护进程输出信息的唯一合法方式;信号处理需保证“可重入”,重点处理SIGTERM(退出)和SIGHUP(重载);避免多实例、意外获得终端、资源泄露是关键避坑点。
2025-12-30 08:24:20
952
原创 第十二章_高级I/O_《UNIX环境高级编程(第三版)》_笔记
存储映射I/O(mmap):零拷贝高效I/O,适合大文件读写和进程间共享内存,核心是。I/O多路复用:select(跨平台、低并发)、poll(无fd上限)、epoll(Linux高并发首选),核心是“监听多fd就绪事件”。记录锁:通过fcntl实现文件/记录级锁,解决多进程冲突,共享锁与排他锁互斥。异步I/O(AIO):非阻塞发起I/O,通过信号或回调通知完成,适合多I/O任务并行。信号驱动I/O:SIGIO通知I/O就绪,信号处理函数中完成I/O,适用于低速设备和socket。
2025-12-29 08:18:02
584
原创 第十一章_终端I/O_《UNIX环境高级编程(第三版)》_笔记
终端:进程的交互式输入输出设备(物理终端如/dev/tty、伪终端如/dev/pts/0)。终端I/O的两种核心模式:规范模式(Canonical Mode):行缓冲,进程仅在收到换行符(\n)或EOF时才读取数据,支持退格、删除等特殊字符处理(默认模式)。非规范模式(Non-Canonical Mode):无缓冲,输入数据立即被进程读取,不处理特殊字符(适用于密码输入、实时响应场景)。终端I/O的核心是termios结构,所有属性配置都围绕该结构的标志位和特殊字符数组。
2025-12-29 08:17:46
935
原创 第十章_信号_《UNIX环境高级编程(第三版)》_笔记
信号是内核向进程发送的异步通知,告知进程发生特定事件(如终端中断、内存越界),进程需中断当前执行流响应。信号是异步通知,处理函数必须“简短、异步安全”,避免复杂操作。优先用sigaction替代signal,它支持信号屏蔽、附加信息、系统调用重启,兼容性更好。信号集与是控制信号递达的核心,用于保护临界区、避免信号嵌套。不可靠信号(1~31)可能丢失,可靠信号(34+)支持排队,高频场景选可靠信号。定时器与信号联动是实战常用场景,setitimer比alarm更强大,优先使用。
2025-12-28 19:40:26
563
原创 第九章_进程间的关系_《UNIX环境高级编程(第三版)》_笔记
进程组是进程的基本管理单位,通过管理,组长进程PID=PGID。会话由进程组组成,setsid创建新会话(需非组长进程),会话首进程可关联控制终端。控制终端仅与一个会话关联,前台进程组唯一能接收终端信号,通过切换。孤儿进程组由父进程退出产生,前台孤儿进程组会收到SIGHUP,需手动处理以避免终止。作业控制是三层模型的实际应用,shell通过进程组管理前后台作业,依赖信号处理实现状态切换。
2025-12-28 19:27:28
596
原创 第八章_进程控制_《UNIX环境高级编程(第三版)》_笔记
fork的核心是“写时复制”,需区分父子进程的共享与独立资源,避免缓冲重复输出问题。exec函数族的选择:需路径搜索用execlpexecvp,自定义环境变量用execleexecvpe,底层调用用execve。进程等待优先用waitpid(灵活控制等待对象和方式),必须解析子进程终止状态,避免僵尸进程。进程终止:正常终止用exit(确保缓冲冲洗和退出处理),子进程终止用_exit(避免干扰父进程)。进程组是作业控制的基础,setpgid可创建新进程组,为后续前台/后台作业管理打基础。
2025-12-28 19:17:39
798
原创 第七章_进程环境_《UNIX环境高级编程(第三版)》_笔记
进程终止优先使用exit(确保缓冲冲洗和退出处理),子进程终止用_exit(避免干扰父进程)。环境变量修改需区分putenv(慎用,需注意内存)和setenv(推荐,安全),修改仅当前进程有效。存储空间布局决定了变量的生命周期和访问权限,避免返回栈上变量的地址。命令行参数解析需处理选项和普通参数,利用简化遍历。资源限制的软限制可动态调整,硬限制为上限,高并发程序需关注。
2025-12-28 19:12:18
881
原创 第六章_系统数据文件与信息_《UNIX环境高级编程(第三版)》_笔记
UNIX系统中,类似口令文件、组文件的系统数据文件(如/etc/hostsget函数:读取下一条记录(自动打开文件),返回指向静态结构的指针(需手动复制数据)。set函数:反绕文件(重新从开头读取)。end函数:关闭文件(必须调用,避免资源泄露)。键搜索函数:针对核心字段的快速查询(如通过主机名查/etc/hosts系统数据文件遵循“get/set/end”通用模式,访问时需注意静态变量覆盖和文件关闭。安全优先:口令/阴影文件的敏感信息需严格控制访问权限,避免泄露。
2025-12-28 19:08:08
981
原创 第五章_标准I/O库_《UNIX环境高级编程(第三版)》_笔记
缓冲机制是核心:优先使用系统默认缓冲,需手动控制时用setvbuf,关键节点(如进程退出前、跨流读数据前)调用fflush。函数选择原则:单字符/行I/O用fgetcfputs(安全),格式化I/O用snprintf(避免溢出),临时文件用mkstemp(安全),内存数据操作用(高效)。避坑要点:不使用getstmpnam;fgets缓冲区预留\0空间;getc参数无副作用;流定向不可混用。
2025-12-28 18:58:57
712
原创 第四章_文件与目录_《UNIX环境高级编程(第三版)》_笔记
用statlstat获取文件属性,S_ISxxx宏判断文件类型。umask控制默认权限,chmod修改权限,特殊位(setuid/setgid)实现特权切换。链接选择:硬链接适合同一文件系统的别名,符号链接适合跨系统或目录快捷方式。目录操作:遵循“打开→读取→关闭”流程,递归遍历时需过滤..并构建完整路径。时间戳:区分“访问/修改/状态更改”,用utimesfutimens修改时间。文件属性获取:优先用lstat(避免符号链接干扰),S_ISxxx宏判断文件类型。umask。
2025-12-28 18:48:08
933
原创 第三章_文件I/O_《UNIX环境高级编程(第三版)》_笔记
原子操作:多步操作一次性完成,中间不可中断,避免其他进程干扰——UNIX文件I/O中解决并发冲突的核心手段。用核心I/O函数(open/read/write/lseek/close)完成基础操作,注意返回值判断和循环读写。优化效率:缓冲区大小设为磁盘块大小(4096),避免频繁系统调用。并发安全:用原子操作(O_APPEND/pread/pwrite/O_CREAT+O_EXCL)避免冲突。灵活控制:用dup/dup2重定向fd,用fcntl修改标志,用fsync保证数据安全。
2025-12-28 18:39:28
610
原创 第二章_UNIX标准及实现_《UNIX环境高级编程(第三版)》_笔记
ISO C是“通用C语言标准”,POSIX是“UNIX系统接口标准”,SUS是“UNIX系统认证标准”。printf(ISO C)、read(POSIX)、shmat(XSI扩展,SUS特有)。#include <limits.h> // 编译时限制头文件printf("int最大值: %d\n", INT_MAX);// ISO C定义(32位系统通常为2147483647)printf("long最大值: %ld\n", LONG_MAX);
2025-12-28 18:32:20
760
原创 第一章_UINX基础知识_《UNIX 环境高级编程(第三版)》_笔记
apue.h:书中自定义头文件,封装了<unistd.h>(系统调用头文件)、<stdio.h>等标准头文件,还定义了err_sys等错误处理函数(避免重复写perror:关键优化点!多数UNIX文件系统的磁盘块大小是4096字节,设置缓冲区为该值可减少readwrite的调用次数(系统调用需切换用户态→内核态,成本高)。若设为1字节,会触发百万次系统调用,效率极低。核心难点:理解“无缓冲I/O”的本质——每次readwrite都直接调用内核,缓冲区由用户手动管理。
2025-12-28 18:12:02
926
原创 内存泄漏-munmap操作问题
解决munmap地址不变munmap的addr必须是mmap返回的原始起始地址(或映射区内的页对齐子地址);长度对齐munmap的length必须与mmap的页对齐长度一致(或页对齐的子长度);校验返回值:必须检查mmapmunmap的返回值,及时处理错误;避免越界:禁止跨映射区解除,禁止重复解除。
2025-12-18 10:41:25
673
原创 怎么保证brk的内存完全释放?
要最大程度地保证brk内存的释放,关键在于减少内存碎片和主动引导glibc进行清理。对于新项目或特定场景,使用更现代的内存分配器(如jemalloc)往往是更根本的解决方案。希望这些具体的方案能帮助你解决这个棘手的问题!如果你能分享更多关于你的应用场景(例如,是长期运行的服务,还是短生命周期的工具),或许我可以提供更针对性的建议。
2025-12-18 10:30:36
252
原创 大内存通过mmap分配,释放后什么情况不能通过munmap直接归还OS
虽然mmap分配的大内存通常能被munmap直接归还,但在系统VMA数量耗尽、munmap参数错误或glibc分配策略改变等情况下,可能无法顺利归还。规范编程、理解系统限制和库行为是避免问题的关键。
2025-12-18 10:29:23
285
原创 xshell能连上ubuntu24而vscode连接不上_临时关闭 Windows 防火墙
总而言之,临时关闭防火墙是一个有效的故障排除方法,但必须以审慎的态度对待。强烈建议您优先尝试为特定程序添加防火墙规则,如果必须关闭,请务必在操作完成后尽快重新开启,以保障计算机安全。希望这些信息能帮助您顺利完成操作!如果您在具体步骤中遇到任何问题,或者想了解更多关于配置防火墙规则的细节,随时可以告诉我。
2025-12-18 08:41:04
480
原创 布隆过滤器
布隆过滤器是一种空间效率极高的概率型数据结构,核心作用是快速判断「一个元素是否存在于集合中」。说「元素不在」→ 100%准确(绝对没在集合里);说「元素在」→ 可能误判(有小概率其实不在);极致省空间(比传统Set/哈希表省几个数量级)。布隆过滤器的核心是「用空间换时间+概率妥协」,适合「允许小概率误判、追求极致空间效率」的场景。按公式计算最优的m和k;实现均匀分布的哈希函数;对位数组进行高效的置1/检查操作。
2025-12-14 21:43:30
661
原创 std::promise 重难点
自定义异常需继承并实现what()// 自定义异常(专业写法)private:string msg;public:// 必须实现what(),且标记noexcept// 子线程抛自定义异常try {throw BusinessException("订单不存在");cout << "业务异常:" << e.what() << endl;// 订单不存在t.join();return 0;核心规则通俗记忆专业要点绑定规则。
2025-12-14 19:25:31
904
原创 大白话Proactor模式
Reactor处理IO就绪事件(“数据可以读了,你自己来拿”);Proactor处理IO完成事件(“数据已经给你读好了,你直接用”)。Proactor模式的核心是**“异步IO请求 → 操作系统完成IO → 处理完成结果”**,通俗易懂的讲就是:你只管“下单”(发起IO请求),剩下的交给别人做,做好了通知你“收货”(处理结果)。原生Proactor(Linux AIO)仅适用于文件IO;网络IO的Proactor需用“Reactor+线程池”模拟;
2025-12-13 18:50:12
960
原创 大白话Reactor模式
用epoll/select批量监控所有连接(经理盯面板);连接有事件才处理(顾客有需求才喊服务员);分工明确(迎宾管接客,点餐员管服务)。定义统一的接口(服务员手册);封装Reactor核心(经理),处理epoll的增删改查;实现Acceptor(迎宾)和Connection(点餐员),处理具体事件。实际项目中不用自己写全套(有成熟库如muduo、Asio),但理解这个模式,就能看懂Redis、Nginx这些高性能软件的底层逻辑了。
2025-12-13 18:32:58
906
原创 QT 架构笔记
QT 6 的设计目标是解决 QT 5 时代积累的模块依赖复杂、跨平台适配成本高、多线程性能瓶颈等问题,通过将庞大的 QT Widgets、QT Gui 模块拆分为更细粒度的组件,如将原 QT Gui 中的图形渲染功能独立为 QT Shader Tools,将字体处理模块分离为 QT Font Database。是 QT 跨平台实现的核心。Qt Quick Controls 提供了轻量级的 QML 类型,用于为桌面、嵌入式和移动设备创建性能良好的用户界面,这些控件具有统一的外观和感觉,同时支持主题定制。
2025-12-09 08:50:01
619
C++基于Lambda表达式的匿名函数对象设计:现代C++编程中STL算法与函数式编程的高效实现
2025-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅