自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 automake安装及使用

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

2023-08-28 17:24:38 1763

原创 git rebase 的坑儿

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

2023-08-02 17:57:48 671

原创 git常用操作

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

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

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

用素筛求小于N的素数

2022-09-24 22:00:02 233

原创 五种I/O模型

五种I/O模型

2022-09-06 13:08:20 137

原创 KMP:字符串匹配算法

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

2022-06-06 23:21:43 111

原创 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 816

原创 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 229

原创 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 750

原创 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 865

原创 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 219

原创 Linux:信号集

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

2021-12-04 22:02:00 657

原创 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 1231

原创 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 133

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

进程间通信:内存映射父子进程间/*#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 473

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

有名管道简单单收单发聊天#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 111

原创 进程间通信 及 管道

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

2021-11-26 19:25:45 393

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

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 2400 1

原创 exec函数族

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

2021-11-18 17:35:04 120

原创 Linux:进程创建

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

2021-11-18 15:46:58 513

原创 Linux:进程概述

进程概述进程状态

2021-11-18 10:31:28 852

原创 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 253

原创 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 136

原创 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 358

原创 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 969

原创 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 115

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

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

2021-11-16 15:30:04 1535

原创 gdb调试

gdb调试

2021-11-13 10:10:54 698

原创 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 250 1

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

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

2021-11-12 14:48:19 562

原创 静态库和动态库对比

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

2021-11-12 11:15:22 330

原创 动态库的制作

动态库的制作命名规则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 1062

原创 静态库制作

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

2021-11-11 22:04:57 464

原创 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 101

原创 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 7527

原创 C++:queue 详解

C++:queue 详解详细用法:定义一个queue的变量 queue M查看是否为空范例 M.empty() 是的话返回1,不是返回0;从已有元素后面增加元素 M.push()输出现有元素的个数 M.size()显示第一个元素 M.front()显示最后一个元素 M.back()清除第一个元素 M.pop()注: 进的一端为头 出的一端为尾。 即头进尾出代码演示#include <ios

2021-09-01 10:43:19 489

原创 n皇后-回溯法全解

n皇后恶心的n皇后,回溯法没啥好说的#include <iostream>#include <vector>#include <string>using namespace std;class Solution {public: //放入(x,y)之后标记不能放的位置 void putQueen(int x, int y, vector<vector<int >>& attack){ //8

2021-08-25 19:30:31 156

原创 Linux_c:多线程之读写锁

读写锁概念读写锁与互斥量类似,不过读写锁有更高的并行性。互斥量要么加锁要么不加锁,而且同一时刻只允许一个线程对其加锁。对于一个变量的读取,完全可以让多个线程同时进行操作。pthread_rwlock_t nwlock读写锁有三种状态,读模式下加锁,写模式下加锁,不加锁。一次只有一个线程可以占有写模式下的读写锁,但是多个线程可以同时占有读模式的读写锁。读写锁在写加锁状态时,在它被解锁之前,所有试图对这个锁加锁的线程都会阻塞。读写锁在读加锁状态时,所有试图以读模式对其加锁的线程都会获得访问权,但是如

2021-08-12 14:28:33 1007

原创 线程同步 -mutex

线程同步 - 1互斥量为什么要使用互斥量当多个线程共享相同的内存时,需要每一个线程看到相同的视图。当一个线程修改变里时,而其他线程也可以读取或者修改这个变里,就需爰对这些线程同步,确保他们不会访问到无效的变量。在变里候改时间多于一个存储器访问周期的处理器结构中,当存储器的读和写这两个周期交叉时,这种潜在的不一致性就会出现·当然这与处理器相关,但是在可移植的程序中并不能对处理器做出任何假设。相关例子两个线程同时修改一个变量代码#include <stdio.h>#include

2021-08-11 15:52:39 109

原创 Linux-c,Signal相关

Linux-c,Signal相关代码#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <signal.h> void *thread_func(void *arg){ printf("I am new thread\n"); return (void *)0;}int m

2021-08-11 14:09:07 234

空空如也

空空如也

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

TA关注的人

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