![](https://img-blog.csdnimg.cn/direct/988c6387110c43379c51e40bdd2a0296.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
笔记
文章平均质量分 75
个人笔记
ACE叫牌
KEEPING CODING
展开
-
Linux-System V共享内存
共享内存是所有IPC中最快的一种。它之所以快是因为共享内存一旦映射到进程的地址空间,进程之间数据的传递就不需要涉及内核了。发送信息的一方,通过系统调用(write或msgsnd)将信息从用户层拷贝到内核层,由内核暂存这部分信息。提取信息的一方,通过系统调用(read或msgrcv)将信息从内核层提取到应用层。建立共享内存之后,内核完全不参与进程间的通信,这种说法严格来讲并不是正确的。因为当进程使用共享内存时,可能会发生缺页,引发缺页中断,这种情况下,内核还是会参与进来的。原创 2024-04-21 17:48:51 · 1118 阅读 · 0 评论 -
Linux-System V信号量
因为信号量集中可能存在多个信号量,需要用这个参数来告知semop函数要操作的是哪个信号量,0表示第一个信号量,1表示第二个信号量,依此类推,最大为nsems-1,即不得超过集合中信号量的个数。semop函数每次会操作一组信号量,每个信号量由一个sembuf来表示,修改一个信号量最好也将其定义成struct sembuf ops[1]这样的数组,semop函数的第三个参数表示要操作的信号量的个数。第二,允许同时管理多种资源,由多个计数信号量组成的一个集合称为计数信号量集,每个计数信号量管理一种资源。原创 2024-04-21 13:32:21 · 1055 阅读 · 0 评论 -
Linux-进程间通信:System V消息队列
System V IPC未遵循“一切都是文件”的Unix哲学,而是采用标识符ID和键值来标识一个System V IPC对象。System V IPC对象的作用范围是整个操作系统,内核没有维护引用计数。调用各种get函数返回的ID是操作系统范围内的标识符,对于任何进程,无论是否存在亲缘关系,只要有相应的权限,都可以通过操作System V IPC对象来达到通信的目的。System V IPC对象具有内核持久性。原创 2024-04-20 15:44:45 · 1234 阅读 · 0 评论 -
Windows下使用CMake生成并使用动态库
_declspec__declspec生成的动态库和静态库在build/Debug目录下。原创 2024-04-20 11:45:35 · 417 阅读 · 0 评论 -
Linux-管道
在没有进程以写模式(O_RDWR或O_WRONLY)打开FIFO文件的情况下,以O_RDONLY模式打开一个FIFO文件时,调用进程会陷入阻塞,直到另一进程以O_WRONY(或者O_RDWR)的标志位打开该FIFO文件为止。同样的道理,在没有进程以读模式(O_RDONLY或O_RDWR)打开FIFO文件的情况下,如果一个进程以O_WRONLY的标志位打开一个FIFO文件,调用进程也会阻塞,直到另一个进程以O_RDONLY(或者O_RDWR)的标志位打开该FIFO文件为止。原创 2024-04-15 21:51:20 · 773 阅读 · 0 评论 -
Linux-线程知识点(2)
在上面的例子中,nanosleep是取消点,如果线程执行到此处时被其他线程取消,就会出现以下情况:互斥量还没有解锁,但持有锁的线程已不复存在。假设遇到取消请求,线程执行到了取消点,却没有来得及做清理动作(如动态申请的内存没有释放,申请的互斥量没有解锁等),可能会导致错误的产生,比如死锁,甚至是进程崩溃。NPTL提供了函数来设置线程是否允许取消,以及在允许取消的情况下,如何取消。PTHREAD_CANCEL_DEFERRED是延迟取消,线程会一直执行,直到遇到一个取消点,这种方式也是新建线程的默认取消类型。原创 2024-04-15 19:09:42 · 1063 阅读 · 0 评论 -
Linux-线程知识点
POSIX函数函数功能描述创建一个线程退出线程获取线程ID检查两个线程ID是否相等等待线程退出设置线程状态为分离状态线程的取消设置线程的名称线程退出,清理函数注册和执行线程退出,清理函数注册和执行。原创 2024-04-06 18:28:03 · 1134 阅读 · 0 评论 -
Linux-exec函数族和system函数
在每个半区之中,带p的表示可以使用环境变量PATH,带e的表示必须要自己维护环境变量,而不使用当前环境变量,首先是效率,使用system运行命令时,一般要创建两个进程,一个是shell进程,另外一个或多个是用于shell所执行的命令。父进程调用fork之后,子进程执行execve函数,抛弃父进程的程序段,和父进程分道扬镳,从此天各一方,各走各路。出错的可能性非常多,手册提供了19种不同的errno,罗列了22种失败的情景。execve函数返回值是特殊的,如果失败,返回-1,但如果成功,永不返回。原创 2024-04-06 18:17:43 · 1045 阅读 · 0 评论 -
Linux-等待子进程
不过,进程的退出其实并没有将所有的资源完全释放,仍保留了少量的资源,比如进程的PID依然被占用着,不可被系统分配。这些资源不释放是为了提供一些重要的信息,比如进程为何退出,是收到信号退出还是正常退出,进程退出码是多少,进程一共消耗了多少系统CPU时间,多少用户CPU时间,收到了多少信号,发生了多少次上下文切换,最大内存驻留集是多少,产生多少缺页中断?对于第二种情况,如果父进程先调用wait()函数,此时子进程还没退出,wait()函数就会阻塞在这里,直到某个子进程退出。成功时,返回已退出子进程的进程ID;原创 2024-04-05 14:06:49 · 964 阅读 · 0 评论 -
Linux-守护进程
守护进程是Linux中的后台服务进程,是一个生存周期较长的进程,通常独立于终端并且周期性的处理某些任务或者等待处理某些发生的事情。守护进程是一个特殊的孤儿进程,这种进程脱离终端,是为了避免被终端的任何信息所打断,其执行过程中也不会在任何终端显示信息。既然如此,为了确保万无一失,只有确保守护进程不是会话的首进程,才能保证打开的终端设备不会自动成为控制终端。即使守护进程是从终端命令行启动的,终端相关的信号如SIGINT、SIGQUIT和SIGTSTP,以及关闭终端,都不会影响到守护进程的继续执行。原创 2024-04-05 13:53:35 · 882 阅读 · 0 评论 -
Linux的软链接和硬链接
概念:硬链接只是在文件系统中创建的一个原文件的副本,它拥有与原文件相同的内容和权限。概念:给文件创建一个快捷方式,依赖原文件,和普通文件没有区别。创建:ln -s 原文件 软链接名称。注意:创建软链接最好用绝对路径。创建:ln 原文件 硬链接名称。原创 2024-04-04 10:26:16 · 623 阅读 · 0 评论 -
Linux制作C++静态库和动态库并使用示例
这样就完成了在Linux下创建和使用动态库的过程。需要注意的是,在运行时,系统需要能够找到动态库,可以通过将动态库路径加入到LD_LIBRARY_PATH环境变量中,或者将动态库拷贝到系统默认的库路径中。编写源文件: 创建你的C/C++源文件(例如,example.c或example.cpp),并编写相应的代码。其中,-L 用于指定库文件的路径,-l 用于指定要链接的库(注意不需要写lib前缀和.so后缀)。其中,-L 用于指定库文件的路径,-l 用于指定要链接的库(注意不需要写lib前缀和.a后缀)。原创 2024-04-04 10:18:48 · 649 阅读 · 0 评论 -
Linux下安装MySQL
2、如果没有,查看防火墙开放端口。1、查看mysql是否在工作。5、重新登录mysql。4、重新加载配置文件。原创 2024-03-31 18:01:22 · 425 阅读 · 0 评论 -
Linux下开发调试C++代码的三种方法
关于这三种调试方法的示例都是基于cmake开发下,也适用不用cmake开发的情况,就不一一演示了,道理都是相通的。原创 2024-03-31 12:39:04 · 1296 阅读 · 0 评论 -
Linux安装Nginx及配置TCP负载均衡
可执行文件在sbin目录下,配置文件在conf目录下的nginx.conf。编译完成后,默认安装在了/usr/local/nginx目录。1、首先使用命令查看当前Linux下所有的TCP连接。打开conf/ngnix.conf文件。可以发现Nginx没有启动。3、Nginx的其他命令。添加红色方框内的配置。原创 2024-03-23 23:30:04 · 848 阅读 · 0 评论 -
OpenMp并行编程
OpenMp是一种并行编程模型,旨在简化多线程编程,它给开发人员提供了一种在共享内存系统中利用多个处理器并行执行任务。OpenMp使用指令将一段串行代码标记为并行区域,告诉编译器这段代码需要并行执行。PThread需要显式明确各个线程的行为,OpenMp只需要简单的声明一段代码通过并行的方式去执行。OpenMp是采用一种fork-join。原创 2023-11-26 16:10:19 · 967 阅读 · 0 评论 -
在项目中使用到protobuf时CMakeLists的编写内容
第一步,将编译好的protobuf库复制粘贴到项目对应的位置第二步:编写.proto文件。原创 2023-07-09 15:01:39 · 992 阅读 · 1 评论 -
Centos下使用C++操作Redis——hiredis
Centos下使用C++操作Redis原创 2022-09-16 11:13:05 · 529 阅读 · 1 评论 -
Centos安装Thrift步骤以及实例
Centos下安装RPC框架Thrift,并使用c++创建实例原创 2022-09-16 10:58:28 · 1185 阅读 · 0 评论 -
Ubuntu下基于mmap映射区的多进程拷贝(运行成功)
实现文件多进程拷贝。**假设有一个超大文件,需对其完成拷贝工作。为提高效率,可采用多进程并行拷贝的方法来实现。假设文件大小为len,共有n个进程对该文件进行拷贝。那每个进程拷贝的字节数应为len/n。但未必一定能整除,我们可以选择让最后一个进程负责剩余部分拷贝工作。可使用len % (len/n)将剩余部分大小求出。为降低实现复杂度,可选用mmap来实现源、目标文件的映射,通过指针操作内存地址,设置每个进程拷贝的起始、结束位置。借助MAP_SHARED选项将内存中所做的修改反映到物理磁盘上。**大体原创 2021-09-20 16:54:45 · 281 阅读 · 0 评论 -
解决 Vmware虚拟机安装之后不显示网卡的问题
今天安装虚拟机,第一次自己安装之后发现用不了,然后跟着b站博主视频安装发现不会出现网卡,这个问题解决了一天才解决掉,所以想记录一下以便其他人可以少踩点雷。首先分析原因,大概率原因应该是我卸载过一次虚拟机,没有卸载干净的问题。现在我们来解决这个问题:第一步:先卸载vmware虚拟机,然后再点击我们的安装程序文件,当我们点击下一步之后会出现三个按钮,分别是更新 修复 删除,(因为我是已经解决了,所以就没法给大家以图片的形式说明,有任何问题欢迎大家私聊我),然后我们此时点击删除按钮,然后它会弹出两个复选框原创 2021-07-17 00:10:04 · 10247 阅读 · 3 评论 -
C语言顺序栈的实现以及进制转换
栈是 仅限定在表尾插入或输出的一种链表形式,它不能像链表一样随便输出、随便插入,是一种“先进后出”的形式,可以理解为逆序输出。1.写顺序栈,我们需要先在头文件部分定义一个存储空间初始分配量和一个存储空间分配增量#include<stdio.h>#include<stdlib.h>#define MAX 100//第一次分配内存空间时分配100#define ADD 10//当我们输入的数据大于初始空间时就增加内存空间,每次增加102.然后是定义结构体变量,定义三个,栈原创 2020-10-31 18:08:18 · 7938 阅读 · 7 评论 -
C语言创建一个单链表实现键盘输入数据以及增删查
作为一个编程小白,在这里发表自己的第一篇博客,心里还是有点紧张。写博客的目的主要还是在于让自己对所学的知识进行充分的掌握,企图在写分析的过程当中可以达到“柳暗花明又一村”的境界,当然如果可以帮助到别人的话自己心里也肯定有辣么一点点成就感。 因为刚接触到链表,所以今天就想和大家一起探讨一下链表。想弄清楚链表,对指针的概念一定要很清楚。我们都知道,链表是由一个又一个节点构成,每个节点又分为数据域和指针域(eg:p->data/p->next)。 ![在这里插入图片描述](https://img.原创 2020-10-18 17:14:56 · 16904 阅读 · 8 评论