C/C++ 和 Cmake 格式化
C/C++ 和 Cmake 格式化安装 Clang-FormatArchLinux 系统级安装运行以下命令安装 clang 包,其中包含了 clang-format: 1sudo pacman -S clang 之后你就可以在全局执行 clang-format 命令来格式化代码。可执行文件一般位于 /usr/bin/clang-format 。但是这里安装的而二进制程序使用的是动态库,你把二进制程序分发到其他没有安装 clang 动态库的计算机上,就会报找不到动态库的错误。 如果你有系统权限,或者是在你自己的计算机上开发,这样就可以了即使是把可执行程序拷贝的项目目录下,执行项目目录下的可执行程序,也可以正常运行(动态库还是使用系统目录下的)。 如果你想使用单独的使用静态库的可执行程序,需要手动构建。 手动用户级安装方法 1:直接下载 clang-format 二进制文件LLVM 官方提供了单独的 clang-format 二进制文件,可以直接下载并解压到项目目录中。 访问 LLVM Download Page。 找到适合你系统的预编译包(例如 Linux...
C++ 杂记
C++ 杂记代码记录随机 ID 生成函数根据高分辨率的时钟为种子,生成指定长度的随机 ID 的函数 123456789101112// 生成指定长度的随机 IDstd::string randomId(size_t length) { using std::chrono::high_resolution_clock; static thread_local std::mt19937 rng( static_cast<unsigned int>(high_resolution_clock::now().time_since_epoch().count())); static const std::string characters( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"); std::string id(length, '0'); ...
C++ 条件变量
C++ 条件变量互斥锁和条件变量在多线程编程中,同步机制是保证程序正确性的关键。互斥锁(mutex)作为最基础的同步原语,能够有效保护临界区资源。但当遇到线程间协作的场景时,仅靠互斥锁就显得力不从心。 典型场景对比: 互斥锁适用场景:多线程修改共享资源(如线程安全的哈希表) 条件变量适用场景:线程依赖其他线程产生的数据(如生产者-消费者模型) 传统轮询方案(伪代码): 12345678910while(true) { lock(mutex); if(condition) { // 处理业务 unlock(mutex); break; } unlock(mutex); sleep(100); //...
Arch Linux 安装和使用 MySQL(MariaDB)
好的!以下是扩展后的博客内容,新增了安全加固、常用命令、备份恢复、远程访问配置等内容,保持了原有的技术文档风格: Arch Linux 安装和使用 MySQL(MariaDB)安装 MariaDB 和客户端工具1sudo pacman -S mariadb mariadb-clients 初始化数据目录12sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql# 输出提示包含初始化完成信息 启动与开机自启123sudo systemctl start mysqld # 启动服务sudo systemctl enable mysqld # 设置开机自启动(可以不设置)sudo systemctl status mysqld # 查看服务状态(注意服务名是mysqld) 安全加固12sudo mysql_secure_installation#...
Windows 和 Linux文件传输和管理
Windows 和 Linux文件传输和管理局域网共享方案Samba 文件共享(全协议兼容)适用场景:需要 Windows 原生支持且长期稳定的共享目录优势:读写性能好,支持权限管理劣势:需配置服务端 配置流程(以 Arch Linux 为例) 安装必要组件: 1sudo pacman -S samba 创建共享目录并配置权限: 12mkdir -p ~/public_fileschmod 1777 ~/public_files # 粘滞位防误删 修改 /etc/samba/smb.conf: 123456[Public]path = /home/yourname/public_filesvalid users = yournameread only = Nocreate mask = 0664directory mask = 0775 设置访问密码: 1sudo smbpasswd -a yourname 启动并设置开机自启: 1sudo systemctl enable --now smb nmb Windows 访问方式文件资源管理器地址栏输入...
CMake 记录
CMake 记录make 和 makefilegcc编译c程序文件,链接静态库和动态库,FFmpeg:https://ffmpeg.xianwaizhiyin.net/base-compile/linux-c-single.html Make和Makefile快速入门:https://blog.csdn.net/Naisu_kun/article/details/116918571 cmake 是 makefile 的上层工具,它们的目的正是为了产生可移植的 makefile,并简化自己动手写 makefile 时的巨大工作量。 常用命令如下: 12345678# cmake 最低版本需求cmake_minimum_required(VERSION 3.13)# 工程名称project(cmake_study)# 设置c++标准,这里是c++11set(CMAKE_CXX_STANDARD 11)# 编译源码生成目标add_executable(cmake_study src/main.cc) SET(set):定义变量语法:SET(VAR [VALUE] [CACHE...
TCP的可靠数据传输
TCP的可靠数据传输简述 众所周知,TCP是传输层中一种面向连接的、可靠的、基于字节流的通信协议,是网络通信中十分重要的桥梁。本文集中于对可靠的数据传输、流量控制以及拥塞控制三个内容的简单描述,需要读者对TCP有一定了解。 可靠的数据传输超时重传、快速重传、sack重传 ...
Hexo+Github Pages 搭建个人博客
Hexo+GitHub Pages 搭建个人博客[TOC] 安装 Node.js 、 npm 和 Hexo CLI 安装 node.js 和 npm。 1sudo pacman -S nodejs npm 安装 hexo 。 123sudo npm install -g hexo-cli# 也可以使用 yay 安装yay -S hexo-cli 本地部署建议可选,新建一个 文件夹存放所有博客相关内容,方便管理。 1mkdir BlogAll 新建并初始化博客文件夹名以 YuanmxcBlog 为例。 12345cd BlogAllmkdir YuanmxcBlogcd YuanmxcBloghexo init # 初始化,这会在当前目录下生成一些默认文件npm install # 安装 package.json 内的项目所需的依赖包在 node_modules 内 初始化博客文件夹后,会在当前目录下生成一些默认文件。 123❯ ls_config.landscape.yml node_modules package-lock.json ...
C++ Primer 笔记
C++ Primer 笔记注意:本文并不是教你学 C++,这只是笔者阅读 《C++ primer》这本书的过程中记录的相关知识,适用于已经对 C++有所了解的读者进行复习和查询,读者至少对 C 和 C++有所了解。 逐页阅读小记第 2 章 变量和基本类型 有符号和无符号一起用,有符号转无符号。 double(一般 16 有效位)一般和 float(一般 7 有效位)运算代价相同,用 double 即可。 char16_t 和 char32_t 为 Unicode 字符,包含所有自然语言字符。 泛化的转义序列:\x 后跟 1 或多个十六进制数字或者 \ 后跟多个八进制数字:\12(换行符) \x4d(字符 M) 初始化不是赋值,定义变量时若未指定初始值,变量被 默认初始化,“默认值”由变量类型和定义位置决定。定义在任何函数体之外的内置类型变量会被默认初始化为...
Git 使用笔记
Git 使用笔记基础使用远程仓库指 github 仓库(repositoris),本地仓库指自己被 git 管理的文件夹(含有.git 文件夹)。 重新与远程仓库建立联系,并可以提交代码(自己远程仓库有代码 , 本地无代码,比如重装系统或者换电脑): 如果只是本地没有了仓库,在与远程仓库建立链接时提示”远程 origin 已存在 “,可以直接 commit+push。 12345678910111213141516# 克隆远程仓库到本地仓库git clone git@github.com:username/repository_name.git(远程仓库地址ssh)# cd 进本地仓库cd 仓库# 初始化 gitgit init# 与远程仓库建立链接(关联远程仓库,远程仓库名字叫 origin)git remote add origin git@github.com:username/repository_name.git(远程仓库地址ssh)# 获取远程更新git fetch origin# 把更新的内容合并到本地分支git merge origin/main#...