LINUX环境编程
文章平均质量分 64
习惯就好zz
一个无趣的人
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Git 交互式 rebase 实战:将后续修改合并到历史提交
本文详细介绍了如何使用Git交互式rebase将后续修改合并到历史提交中的实战操作。主要内容包括:通过创建临时提交开始rebase过程;使用edit标记目标提交;将临时提交中的文件修改合并到历史提交;处理rebase过程中出现的冲突和空提交情况。文章特别强调了操作注意事项,如确保工作区干净、正确处理冲突、备份分支等风险控制措施。这种技术能有效保持Git历史的整洁性,特别适用于代码评审后需要修正历史提交的场景,帮助开发者维护更清晰、更有逻辑性的版本控制记录。原创 2026-04-29 17:00:53 · 433 阅读 · 0 评论 -
告别代码仓库“污染”:Android 编译系统中版本号自动生成的终极方案
本文针对嵌入式开发中版本号文件污染代码仓库的问题,提出了一种基于Android编译系统的自动化解决方案。通过将静态维护的version.h改为动态生成,采用模板文件version.h.template配合genversion.sh脚本和Android.bp的genrule模块,实现了编译时自动生成版本信息而不再修改源码。该方法解决了Git状态污染、多分支冲突等问题,同时符合现代构建系统的规范要求。方案实施后,版本信息能正确生成且源码仓库保持整洁,体现了自动化构建流程优化对开发效率的提升作用。原创 2026-03-30 11:53:04 · 208 阅读 · 0 评论 -
Git LFS 处理大文件推送失败的完整记录
本文记录了使用Git LFS解决大文件推送失败的完整过程。当331MB的APK文件超过GitHub的100MB限制时,通过安装Git LFS、配置追踪规则、撤销原有提交、从索引移除大文件并重新添加等步骤,成功将大文件转为LFS指针。关键点包括:使用**匹配子目录、强制触发LFS转换需先git rm --cached、验证Git对象大小确认转换成功。文中还提供了常用Git LFS命令速查表,并总结了规则匹配、文件转换等常见踩坑点,为处理类似问题提供了实用参考。原创 2026-03-09 17:01:58 · 516 阅读 · 0 评论 -
解决VMware Ubuntu端口映射SSH连接失败问题:无需重启服务器的快速修复方案
通过重启VMware NAT和DHCP服务解决端口映射问题,比重启整个Windows服务器更加高效和安全。快速:只需几秒钟完成安全:不影响其他Windows服务可自动化:可以通过脚本实现自动监控和修复可预防:通过服务自动恢复和定期检查减少故障发生建议将自动化脚本部署到生产环境中,并设置监控告警,确保VMware虚拟机的远程访问稳定性。相关资源VMware官方文档:配置NAT网络PowerShell服务管理命令Windows端口转发配置指南。原创 2026-01-22 09:09:38 · 951 阅读 · 0 评论 -
在 Ubuntu 18.04 (WSL) 上配置 LazyVim
摘要: 在Ubuntu 18.04(WSL)上配置LazyVim面临GLIBC版本过低(2.27)和Tree-sitter依赖问题。解决方案包括:1)使用Homebrew替代apt管理软件包,安装新版Neovim(≥0.10);2)通过Rust手动编译兼容的Tree-sitter-cli(v0.22.6),并创建软链接覆盖Mason自动安装的版本;3)安装LazyVim并修复Locale和字体设置。该方法成功绕过了系统限制,实现了现代化Neovim体验,尽管checkhealth可能显示版本警告,但功能完全原创 2026-01-07 19:09:49 · 783 阅读 · 0 评论 -
在 Ubuntu 18.04 旧系统上部署新版 GitHub Actions Runner 的终极方案
本文分享了在Ubuntu 18.04旧系统上部署新版GitHub Actions Runner的解决方案。针对GLIBC版本冲突问题,采用Docker+SSH分离架构:Runner运行在Ubuntu 20.04容器中,通过SSH连接宿主机执行编译任务。文章详细记录了网络配置、容器化部署、SSH免密登录、脚本化管理及内存优化等关键步骤,最终实现了旧编译环境与新Runner的兼容共存,解决了嵌入式项目CI/CD的部署难题。该方案无需重构项目或升级硬件,通过容器化和资源优化实现了低成本自动化。原创 2026-01-06 17:21:09 · 947 阅读 · 0 评论 -
nvim的cpp代码里使用cpplint提醒
conform.nvim 的一个非常好的功能是,当使用像 prettier 这样的格式化程序时,它会检查你的 node_modules 中是否存在该版本,并改用该版本。如果你使用的是 Mac 或 Linux,配置应该在 ~/.config/nvim 在 Windows 上它应该位于 ~/AppData/Local/nvim/在 ~/.config/nvim/lua/[name]/plugins/lsp/ 下添加 mason.lua 文件。还有其他可能的原因,例如格式化程序未安装。原创 2025-09-08 09:10:48 · 913 阅读 · 0 评论 -
vim替换和查找
vim搜索和替换学习原创 2022-11-28 09:37:30 · 3839 阅读 · 0 评论 -
vim使用宏简单记录
一、基本使用q[a-z]开始录制宏q停止录制@[a-z]使用宏@@调用最近使用的宏22@[a-z]多次重放宏二、宏的执行方式串行方式:5@[a-z]宏内包含向下一个目标行进行移动的指令,如果出现错误,宏会停止执行并行方式::normal @[a-z]在高亮区域的每一行上并行执行宏,某一行出现错误不影响其他行...原创 2022-02-22 13:48:24 · 409 阅读 · 0 评论 -
dpkg –get-selections显示标记为“deinstall”的包
dpkg –get-selections显示标记为“deinstall”的包转载 2021-09-30 09:58:59 · 779 阅读 · 0 评论 -
网络并发服务器设计
一、问题描述TCP编程学习中,当打开tcp_server后,同时打开一个tcp_client不运行。再打开一个tcp_client发送数据后。tcp_server没有响应,因为tcp_server建立和第一个tcp_client的连接后,一直在等待它的数据(阻塞状态)。为了解决这个问题,我们需要创建子进程来接受数据,而父进程只要一直建立连接就行了。这样就能不断的处理数据了。二、原创 2017-08-15 09:06:12 · 266 阅读 · 0 评论 -
chroot()使用
好多的程序,都有使用chroot来是程序chroot到一个目录下面,来保护文件系统,今天在看snort代码的时候,看到了实现,就贴出一个测试程序来,实际上是比较简单的。 chroot()在linux下面需要使用root权限,这一点需要注意了。 #include#include#includeint main(void){ char chroot_path[] = "/tmp";原创 2017-08-15 09:11:58 · 1047 阅读 · 0 评论 -
信号量的互斥与同步
一、信号量互斥公示栏问题:同学A在公示栏上写“数学课取消”,同学B然后又写了“英语课考试”。但是当,同学A写下“数学课”后。出去了一下,这是同学B写了“英语课考试”,同学A再回来写“取消”。这时我们所要传达的意思就完全不一样了。所以需要引入互斥。1. 信号量信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥)。进程可以根据它判定是否能够访原创 2017-08-15 09:05:43 · 1798 阅读 · 0 评论 -
tcgetattr学习
一、函数名称:int tcgetattr(int fd, struct termios *termios_p); 二、函数功能: The termios functions describe a general terminal interface that is provided to control asynchronous communications ports原创 2017-08-15 09:11:36 · 4356 阅读 · 0 评论 -
Linux网络编程协议
一、网络协议1.网络模型OSI参考模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层TCP/IP参考模型(Linux):应用层、传输层、网络层、网络接口层2.协议分析 3.以太网协议格式4.TCP协议格式5.UDP协议格式二、网络编程模型1.Socket的实质就是一个接口, 利用该接口,用户在使用不同的网络协议时原创 2017-08-15 09:05:55 · 290 阅读 · 0 评论 -
消息队列编程
1.基本概念消息队列就是一个消息的链表。而一条消息则可看作一个记录,具有特定的格式。进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。第9类 消息队列编程 9.1 创建/打开消息队列 9.1.1 函数名 Msgget 9.1.2 函数原形 Int msgget(key_t key, int msgflg原创 2017-08-15 09:05:49 · 304 阅读 · 0 评论 -
多线程互斥和同步
一、线程互斥1.线程概念线程就是“轻量级”的进程。线程与创建它的进程共享代码段,数据段。线程拥有自己独立的栈。2.函数学习创建线程:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);头文件: 编原创 2017-08-15 09:05:52 · 293 阅读 · 0 评论 -
atexit函数学习
函数名: atexit 头文件:#include 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: void atexit(void (*func)(void)); 注意:exit调用这些注册函数的顺序与它们 登记时候的顺序相反。同一个函数如若登记多次,则也会被调用多次。 #include stdio.h>原创 2017-08-15 09:11:40 · 396 阅读 · 0 评论 -
共享内存通信
1.基本概念共享内存是IPC机制中的一种. 顾名思义,它允许两个不相关的进程访问同一段内存这是传递数据的一种非常有效的方式。2.函数学习第10类 共享内存编程 10.1 创建/获取共享内存 10.1.1 函数名 shmget 10.1.2 函数原形 int shmget(ket_t key, size_t size, in原创 2017-08-15 09:05:46 · 334 阅读 · 0 评论 -
stat函数学习
函数名: stat() 功 能: 得到文件的信息,将其保存在buf结构中,buf的地址以参数形式传递给stat。 用 法: int _stat(const char *path,struct _stat *buffer) 参数: const char *path: 文件名或者目录名 struct _stat *buffer:结构体对象地址原创 2017-08-15 09:11:51 · 1505 阅读 · 1 评论 -
sigaction函数学习
sigaction(查询或设置信号处理方式)相关函数 signal,sigprocmask() ,sigpending,sigsuspend, sigemptyset 表头文件 #include 定义函数 int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);原创 2017-08-15 09:11:48 · 344 阅读 · 0 评论 -
TCP/UDP socket编程学习
一、SOCKET编程创建一个传输终端:socket函数原型:int socket(int domain, int type, int protocol);头文件:sys/types.h sys/socket.h成功:返回新的socket文件描述符 失败:-1domain:协议类型type:socket类型protocol:选择特定协议,默认为0.绑定地址(绑定原创 2017-08-15 09:05:58 · 409 阅读 · 0 评论 -
getcwd函数学习
getcwd 函数原型:char *getcwd( char *buffer, int maxlen ); 功 能:获取当前工作目录 参数说明:getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数maxlen为buffer的空间大小。 返 回 值:成功则返回当前工作目录,失败返回 FALSE。 在某些 U原创 2017-08-15 09:11:54 · 1969 阅读 · 0 评论 -
linux应用编程学习(6)信号
一、信号:在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制。二、信号处理流程:①选择信号②发送信号③处理信号三、信号类型:Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示),其中常见的信号有: SIGKILL: 杀死进程 SIGSTOP:暂停进程 S原创 2017-08-15 09:05:40 · 375 阅读 · 0 评论 -
静态函数库、动态链接库设置
一、外部函数Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供。二、函数库分类静态链接库动态链接库三、函数库-存放位置Linux应用程序使用的主要函数库均存放于/lib, /usr/lib目录下,其中采用*.so.*方式命名的是动态函数库,而以*.a方式命令的是静态函数库。四、静态链接库-特点程序所要用到的库函数代码在链接时全部被copy原创 2017-08-15 09:05:37 · 362 阅读 · 0 评论 -
Linux应用程序地址布局
一、程序构成在学习Linux应用程序开发时,经常会遇到如下概念:代码段、数据段、BSS段(Block Started by Symbol,又名:未初始化数据段) 、堆(heap)和栈(stack)。而这些部分也是构成Linux应用程序的重要组成部分。二、内存布局1.从低地址到高地址分别为代码段、数据段、BSS段、堆、栈 2.堆向高内存地址生长 3.栈向低内存地原创 2017-08-15 09:05:34 · 345 阅读 · 0 评论 -
vim屏幕滚动笔记
屏幕滚动Ctrl-E:显示窗口向下移动一行,光标如果在最上面,就会往下移动一行,其他情况会保持在那一行。Ctrl-Y:显示窗口向上移动一行,光标如果在最下面,就会往上移动一行,其他情况会保持在那一行。Ctrl-D:窗口向下滚动N行,默认滚动窗口行数的一半。光标会在相对的行数位置(比如在窗口下的第二行,翻页后还在第二行)Ctrl-U:窗口向上滚动N行,默认滚动窗口行数的一半。光标会在相对的行数位置(比如在窗口下的第二行,翻页后还在第二行)Ctrl-F:窗口向下滚动N页。翻页内容比较多,光标会移动到原创 2021-09-07 09:10:23 · 695 阅读 · 0 评论 -
vimtutor学习笔记
lesson 1 SUMMARY 1. The cursor is moved using either the arrow keys or the hjkl keys. h (left) j (down) k (up) l (right)# 上下左右移动 2. To start Vim from the shell prompt type: vim FILENAME <ENTER># vim filename 打开文件 3原创 2021-09-05 20:12:04 · 230 阅读 · 0 评论 -
px30板子使用nfs文件挂载,无法写入的问题
尝试办法一:修改/etc/exports文件书写格式,有没有多个空格之类的。尝试办法二:创建文件夹出现如下提示mkdir: can't create directory 'test': Read-only file system使用命令mount rw -o remount /即可解决原创 2021-02-08 15:49:40 · 388 阅读 · 0 评论 -
Ubuntu只读文件系统修复方法
首先备份重要数据fsck.ext4 -p /dev/sdb5reboot像pro的机器,就用fsck.ext4 -p /dev/mmblk0p7原创 2021-02-04 09:11:01 · 1557 阅读 · 0 评论 -
linux内核 asmlinkage宏
asmlinkage是个宏,使用它是为了保持参数在stack中。看一下/usr/include/asm/linkage.h里面的定义:#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))其中 __attribute__是关键字,是gcc的C语言扩展。__attribute__机制是GNU C的一大特色,它可以设置函数属性、变量属原创 2017-01-11 21:40:36 · 277 阅读 · 0 评论 -
控制寄存器(CR0,CR1,CR2,CR3)和CR4
http://blog.sina.com.cn/s/blog_4017fe890100gg51.htmlhttp://blog.sina.com.cn/s/blog_85998e38010122wq.htmlhttp://www.tyut.edu.cn/kecheng1/2008/site04/courseware/chapter2/2-5-2.html控制寄存器 (控制寄存器原创 2017-01-11 21:40:31 · 5949 阅读 · 0 评论 -
umask函数linux
#include "sys/types.h"#include "sys/stat.h"mode_t umask(mode_t cmask);umask函数为进程设置文件方式创建屏蔽字。unix中文件最大访问权限是0777, 即_rwxrwxrwx.如果讲umask函数设置为0111,那么用0777与0111(umask设置值)取异或操作得0666,即_rw_rw原创 2017-01-11 21:39:58 · 638 阅读 · 0 评论 -
load_elf_binary阅读(2)
/** Check to see if the section's size will overflow the* allowed task size. Note that p_filesz must always be* */if (BAD_ADDR(k) || elf_ppnt->p_filesz > elf_ppnt->p_memsz || elf_ppnt->p原创 2017-01-11 21:39:32 · 395 阅读 · 0 评论 -
load_elf_binary阅读(1)
static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs) { struct file *interpreter = NULL; /* to shut gcc up */ unsigned long load_addr = 0, load_bias = 0; int load_addr_原创 2017-01-11 21:39:30 · 704 阅读 · 0 评论 -
qwt 6.1.0集成进Qt creator 2.8.1步骤
环境准备与文件编译 ·关于Qt 发现一个Qt正确安装的教程,非常棒!http://www.wikihow.com/Install-Qt-SDK-on-Ubuntu-Linux Qt版本是4.8.5,在http://qt-project.org/downloads页面下载这个链接Qt libraries 4.8.5 for Linux/X11 (230 MB原创 2017-01-11 21:39:10 · 369 阅读 · 0 评论 -
linux应用编程学习(4)多进程编程
四、多进程编程类 进程:进程是一个具有一定独立功能的程序的一次运行活动。进程特点:动态性、并发性、独立性、异步性进程状态:进程ID:进程ID(PID):标识进程的唯一数字。父进程的ID(PPID)。启动进程的用户ID(UID)。进程互斥:进程互斥是指当有若干进程都要使用某一资源时,但该资源在同一时刻最多允许一个进程使用,这时其他进程必须 等待,直到占原创 2017-01-11 21:38:07 · 318 阅读 · 0 评论 -
linux应用编程学习(3)库函数文件类
三、库函数文件类 库函数:基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在Windows、Linux还是其他的操作系统中,都是使用这些函数。使用库函数进行程序设计可提高程序的可移植性。流:对于标准的C函数库,它们的操作都是围绕流来进行的。流是一个抽象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需原创 2017-01-11 21:38:04 · 291 阅读 · 0 评论 -
linux应用编程学习(2)系统调用文件类
二、 系统调用文件类 文件描述符:在中国,每一个成年的公民都会有一个身份证编号,它的本质就是一个数字,我们可以利用这个数字来标记这个公民。在Linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配,我们称之为:文件描述符。 2.1.打开文件: int open(const char *pathname,int flags);原创 2017-01-11 21:37:54 · 295 阅读 · 0 评论 -
linux应用编程学习(1)时间类
一、时间类 时间类型:Coordinated Universal Time(UTC):世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。 Calendar Time:日历时间,是用“从一个标准时间点(如:1970年1月1日0点)到此时经过的秒数”来表示的时间。1.1.获取日历时间原创 2017-01-11 21:37:51 · 297 阅读 · 0 评论
分享