自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 子仓库 push 提交到 gerrit 出现没有 change-id 的解决办法

对于没有 change-id 的 commit 可以使用 git commit --amend 或者 git rebase -i 重新增加 change-id。由于子仓库在 clone 后,仓库的 .git 目录中,没有 hook/commit-msg 工具。有了 change-id 后即可以顺利 push 到 gerrit 并走 review 流程了。所以在生成的 commit message 中,不会自动增加 change-id。

2025-10-31 15:58:56 245

原创 在 Ubuntu 环境下 sh 脚本运行因为 Bash 改用 Dash 语法报错问题

开发时遇到了运行 sh 脚本时提示 Syntax Error 的问题,下面给出问题原因和解决方案。

2025-10-29 10:46:17 281

原创 下班倒计时

【代码】下班倒计时。

2025-07-17 17:41:12 304

原创 【无标题】

【代码】【无标题】

2025-07-04 16:00:55 98

原创 【无标题】

【代码】【无标题】

2025-07-04 16:00:21 431

原创 automake安装及使用

/configure 生成 Makefile文件;不成功的话执行 autoreconf -i 之后再重新执行 ./configure。然后将configure.scan 修改为 configure.ac。执行 autoconf 生成 configure 文件。编写Makefile.am文件。首先执行 autoscan。

2023-08-28 17:24:38 2097

原创 git rebase 的坑儿

拉取远程分支之后如果没有冲突直接使用若有冲突, 解决冲突, 一般是使用当前的更改, 因为传入的更改是你本地的更改然后使用git add提交冲突。

2023-08-02 17:57:48 777

原创 git常用操作

修改区(Changes):当修改了某个文件之后,这个文件就会出现在修改区,表示此文件进行了修改。

2023-07-06 09:12:27 447 1

原创 素筛:求小于N的素数

用素筛求小于N的素数

2022-09-24 22:00:02 268

原创 五种I/O模型

五种I/O模型

2022-09-06 13:08:20 164

原创 KMP:字符串匹配算法

KMP字符串匹配算法,带prefix数组的求解和匹配机制图解

2022-06-06 23:21:43 150

原创 C++:常量指针和指针常量

一、 常量指针int a = 10;int b = 20;const int *p = &a;//指针指向可变p = &b;//指针所指的值不可变// *p = 1; can'tint * const p;// 指针指向不可变// p = &b; can't//指针的所指的值可变*p = 1;指针的指向可变, 指针所指的值不可变指针常量** 指针的指向不可变, 指针所指的值可变 **...

2022-03-11 19:58:58 843

原创 Linux:线程合集

概述pthread_create()/*pthread_self 获取线程IDint pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);-功能:创建一个子进程-参数: -thread: 新线程ID, 创建成功系统回填

2021-12-05 16:55:07 253

原创 Linux: 守护进程

守护进程例子#include <sys/stat.h>#include <sys/types.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/time.h>#include <signal.h>#include <time.h>#include <string.h>//创建...

2021-12-05 16:52:34 776

原创 Linux:共享内存

共享内存(效率最高的进程间通信方式)共享内存简单实现写/*#include <sys/ipc.h>#include <sys/shm.h>int shmget(key_t key, size_t size, int shmflg);-功能:创建一个新的共享段,或者获取一个既有的共享内存段的标识 新创建的内存段中的数据都会被初始化为0-参数: -key: key_t是整形,通过这个找到或者创建一个共享内存,一般使用16进制的非0

2021-12-05 12:59:57 919

原创 Linux:SIGCHLD回收僵尸进程

信号的相关操作几乎都有了吧/*SIGCHLD信号产生的是三个条件: -1:子进程结束 -2: 子进程暂停(收到SIGSTOP信号暂停) -3:子进程继续运行(处于停止态,收到SIGCONT后唤醒) 以上三种情况都会给父进程发送该信号,父进程默认忽略该信号 可以用SIGCHLD解决僵尸进程问题*/#include <stdio.h>#include <signal.h>#include <unistd.h>#incl

2021-12-05 09:59:46 260

原创 Linux:信号集

1.用户通过键盘Ctrl +C,产生2号信号SIGINT(信号被创建)2.信号产生但是没有被处理(未决) -在内核中将所有的没有被处理的信号存储在一个集合中(未决信号集) - SIGINT信号状态被存储在第二个标志位上 -这个标志位的值为0,说明信号不是未决状态 -这个标志位的值为1,说明信号处于未决状态3.这个未决状态的信号需要被处理,在处理之前需要和另一个信号集(阻塞信号集)进行比较 -阻塞信号集默认为0,不会阻塞任何信号,如果需要阻塞某些信号,需要调用某些api -如果阻...

2021-12-04 22:02:00 724

原创 Linux:信号及信号捕捉

kill、raise、abort函数#include <stdio.h>#include <string.h>int main(){ char *buf; strcpy(buf, "hello"); return 0;}carey@ubuntu:~/Linux/lesson17_sig$ gcc core.c -gcarey@ubuntu:~/Linux/lesson17_sig$ lsa.out core.ccarey@ub

2021-11-30 21:38:39 1265

原创 Linux: 信号

Linux: 信号 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIG

2021-11-29 19:54:05 161

原创 进程间通信:内存映射

进程间通信:内存映射父子进程间/*#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);description: mmap() creates a new mapping in the virtual address space of the calling process. The starting address

2021-11-29 16:14:49 513

原创 有名管道简单单收单发聊天

有名管道简单单收单发聊天#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h>int main(){ //创建管道A if(access("pipeA", F_OK) == -1){ printf("creat

2021-11-28 19:28:17 137

原创 进程间通信 及 管道

亲缘关系之间共享文件描述符,所以可以通信。pipe()/*#include <unistd.h>int pipe(int pipefd[2]);功能: 创建一个命名管道来进程间通信参数: - int pipefd[2]:传出参数 -pipefd[0] : 读端 -pipefd[1] ; 写端返回值: - 成功: 0 - 失败: -1, 并且设置错误号注意: 只能在亲缘关系进程间通信 ...

2021-11-26 19:25:45 431

原创 进程退出、孤儿进程、僵尸进程

exit()/*//Linux 系统库#include <unistd.h>void _exit(int status); -参数: status:进程退出时的状态信息,父进程挥手子进程的时候可以获取// 标准C库#include <stdlib.h>void _Exit(int status);*/#include <stdio.h>#include <unistd.h>#include <stdl.

2021-11-20 15:44:56 2428 1

原创 exec函数族

前六个都是标准C库的函数,最后一个是Linux的系统函数。最常用的是前两个。execl/*#include <unistd.h>int execl(const char *path, const char *arg, ...);-参数: -path:需要指定的执行文件的路径名称(推荐绝对路径) - arg:是执行可执行文件所需要的参数列表 第一个参数一般没有什么作用,为了方便,一般写的是执行的程序的名称 自从第二个参数开始往后,就...

2021-11-18 17:35:04 149

原创 Linux:进程创建

fork()/*#include <sys/types.h>#include <unistd.h>pid_t fork(void); 作用: 创建子进程 返回值: fork()的返回值会返回两次:父和子进程都会有返回值 成功: 父进程里返回创建的子进程的id 子进程里面返回0 失败: 父进程返回-1 注:通.

2021-11-18 15:46:58 550

原创 Linux:进程概述

进程概述进程状态

2021-11-18 10:31:28 876

原创 Linux:dup、dup2 、fcntl 函数

dup、dup2函数dupdup() 系统调用创建文件描述符 oldfd 的副本,使用编号最小的未使用文件描述符作为新描述符。/*#include <unistd.h>int dup(int oldfd);作用: 复制一个新的文件描述符,指向同一个文件。 fd=3, int fd1 = dup(fd); fd1与fd指向同一个文件。且fd1选择空闲的文件描述符中最小的一个int dup2(int oldfd, int newfd);

2021-11-17 16:48:43 295

原创 Linux:目录遍历函数

目录遍历函数遍历目录下的常规文件/*#include <sys/types.h>#include <dirent.h>DIR *opendir(const char *name);DIR *fdopendir(int fd);参数; -name: 需要打开的目录的名称返回值: DIR * 类型, 可理解为目录流 错误返回NULLdescription: the opendir() function opens

2021-11-17 14:20:33 168

原创 Linux:目录操作文件

Linux:目录操作文件mkdir/*#include <sys/stat.h>#include <sys/types.h>int mkdir(const char *pathname, mode_t mode);作用: 创建一个目录参数: pathname:创建目录的路径 mode: 权限,八进制数或相应宏值返回值: 成功:0 失败:-1*/#include <sys/stat.h>#include

2021-11-17 10:40:36 397

原创 Linux:文件属性操作函数

Linux:文件属性操作函数access/*#include <unistd.h>int access(const char *pathname, int mode);作用:判断某个文件是否有某个权限,或者判断文件是否存在参数:- pathname:判断的文件路径- mode: R_OK:判断是否有读权限 w_OK:判断是否有写权限 x_OK:判断是否有执行权限 F_OK:斯文件是否存在返回值: 成功:0 失败:-1*/#

2021-11-17 09:51:49 992

原创 Linux: 文件操作

Linux: 文件操作int open (const char *pathname,int flags) ;int open (const char *pathname,int flags,mode_t mode) ;int close (int fd);ssize_t read(int fd, void *buf,size_t count) ;ssize_t write(int fd,const void *buf, size_t count) ;off_t lseek (int fd, of

2021-11-16 21:24:33 136

原创 标准C库IO函数和Linux系统IO函数对比

标准C库IO函数和Linux系统IO函数对比

2021-11-16 15:30:04 1574

原创 gdb调试

gdb调试

2021-11-13 10:10:54 723

原创 makefile详解

makefile两种写法:1 推荐app:sub.o add.o mult.o div.o main.o gcc sub.o add.o mult.o div.o main.o -o appsub.c:sub.c gcc -c sub.c -o sub.oadd.o:add.c gcc -c add.c -o add.omult.o:mult.c gcc -c mult.c -o mult.odiv.o:div.c gcc -c div.c -o div.omain.

2021-11-12 16:01:42 280 1

原创 vim中多行注释和多行删除命令

vim中多行注释和多行删除命令这些命令也是经常用到的一些小技巧,可以大大提高工作效率。.多行注释:首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;在行首使用上下键选择需要注释的多行;按下键盘(大写)“I”键,进入插入模式;然后输入注释符(“//”、“#”等);最后按下“Esc”键。 注:在按下esc键后,会稍等一会才会出现注释,不要着急~~时间很短的2.删除多行注释:首先按esc进入命令行模式下,按下Ctrl + v, 进入列模式;选定要取消注释的多行;

2021-11-12 14:48:19 617

原创 静态库和动态库对比

静态库和动态库对比视屏截图 懒得整理 截图真香

2021-11-12 11:15:22 358

原创 动态库的制作

动态库的制作命名规则Linux : libxxx.solib :前缀(固定)xxx: 库的名字,自己起.so后缀(固定)在Linux下是一个可执行文件windows : libxxx.dl1动态库(共享库)制作gcc 得到.o 文件、得到和位置无关的代码gcc - -fpic/-fPIC a.c b.cgcc得到动态库gcc -shared a.o b.o -o libcalc.so工作原理静态库: GCc进行链接时,会把静态库i代码打包到可执行程序中。动态库: GCC

2021-11-12 11:00:40 1089

原创 静态库制作

静态库的制作1,什么是库?(1)库文件是计算机上的一类文件, 可以简单的把库文件看成―种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数或类。(2)库是特殊的一种程序,编写库的程序和编写一般的程序区别不大,只是库不能单独运行。(3)库文件有两种.静态库和动态库(共享库),区别是:静态库在程序的链接阶段被复制到了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。(4)库的好处:1.代码保密2.方便部署和分发静态库的制作命名规则:Linux

2021-11-11 22:04:57 496

原创 gcc编译全过程

gcc编译全过程gcc test.c -E -o test.i #预处理gcc test.i -S -o test.s #转变为汇编语言gcc test.s -s -o test.o # 转变为二进制可执行文件

2021-11-10 15:43:31 124

原创 C++:unordered_set的count

C++:unordered_set的count用法unordered_set_name.count(element) 参数此函数接受单个参数element 。表示容器中是否存在需要检查的元素。返回值如果元素存在于容器中,则此函数返回1,否则返回0。示例#include <iostream> #include <unordered_set> using namespace std; int main() { unordered_s

2021-10-15 18:53:06 8289

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除