- 博客(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
原创 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: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
原创 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
原创 动态库的制作
动态库的制作命名规则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关注的人