- 博客(55)
- 资源 (1)
- 收藏
- 关注

原创 子父进程之间的通信--消息队列,共享内存
题目:当程序运行时,父进程fork出4个子进程。父进程负责产生消息(每1s产生一个消息),4个子进程负责处理消息。父子进程之间通过消息队列来传递消息。父进程需要维护一个本地数据库(格式与共享数据库相同),当生成一个消息时,父进程要同步更新本地数据库。子进程在处理消息时,根据消息的内容来对共享数据库进行更新(比如,当一个子进程收到一个[index=2, op=increase]的消息时,需要将共享数据库中index为2的条目的count值递增1),并延迟500ms。父进程需要处理SIGT.
2021-05-10 10:16:25
1780

原创 指针常量和常量指针
常量指针特征:指针所指向的内容不可以通过指针的间接引用(p)来改变。意思是p是右值。例如: const int x = 1; - const int * p1; - p1 = &x; // 指针P1的类型是(const int *)**不能通过*p来修改x的值** - p1 = 10; //error;char* s1 = "hello";//error,因为h...
2020-04-10 16:32:07
651
原创 编译thrift报错:/usr/bin/ld: SecondService.cpp: undefined reference to `apache::thrift::async
直接编译thrift生成的服务端代码:报错:解决方法:
2025-03-13 13:49:29
104
原创 vscode离线方式远程到没有网络的服务器上
会报错无法下载vscode-server_x86.tar.gz,根据报错按F12可以看到下载链接。4.将压缩包拷贝到无网络的服务器上的~/.vscode-server/bin/<32位uuid目录>/目录下并解压到该目录,如果原有目录下有内容,可以把原有的先删掉,在解压。参考:https://blog.youkuaiyun.com/u013259321/article/details/106499869。1.首先要在本地和远端服务器都安装vscode的安装包,无网络离线安装。5.重新在本地vscode进行连接即可。
2024-07-10 17:36:41
1282
1
原创 linux内核模块编译及常见问题
8/报错insmod: cannot insert ‘/lib/modules/adc.ko’: unknown symbol in module or invalid parameter。make modules ./net/ceph -j6 (本以为之编译/net/ceph,结果全部给编译了,主要是很慢)、5/编译完成后,再修改代码,编译自己的模块(/net/ceph编译出来为libceph.ko)进入./net/ceph执行make -j编译。进入./net/ceph,make clean。
2024-06-19 17:34:54
390
原创 linux源码编译
2. 从当前机器的启动目录拷贝配置信息到源代码目录。这步操作的意思是我们编译内核的配置采用用当前环境一致的配置。5/编译完成后,再修改代码,编译自己的模块(/net/ceph编译出来为libceph.ko)6/若需要clean自己的模块。4/先编译所有模块,确保正确。
2024-06-19 10:49:21
195
原创 rbd块设备数据IO流程(client端)
添加块设备,首先创建一个rbd client用来通信,然后选择一个pool存储池去创建rbd设备,创建完成后调用rbd_dev_device_setup初始化rbd设备,在初始化块设备的时候会启动工作队列rbd_wq,并将通用块设备层的请求转化为一个work添加到rbd_wq工作队列中,然后由cpu调度执行工作队列rbd_wq中的work,work对应的处理函数为rbd_queue_workfn,该work用于处理通用块设备层的IO请求。
2024-05-24 17:07:32
959
原创 ceph-mon运行原理分析
2)存储位置:mon的数据存储在一个可配置的路径mon_data下面,mon_data默认位置为/var/lib/ceph/mon/$ceph-id目录下,该目录存放了mon的keyring秘钥、kv存储引擎名称(rocksdb)、mon支持的版本(octopus)、以及RocksDB的存储文件store.db。当vip发生迁移时,需要同步迁移ceph-mon的节点的/var/lib/ceph/mon/$cluster-$ceph-id/目录内的所有数据,因为该目录存储了ceph-mon的所有数据。
2023-07-27 11:35:30
1649
原创 字节拷贝和反序时,注意事项
当被拷贝变量的字节数(6字节) 和 拷入变量的字节数(8字节)不相等时,反序操作要格外注意,如果用常规的htonl或者ntohl进行拷贝的话,会出问题,导致值会变化。1.反序 拷贝问题。
2022-11-19 20:33:18
726
原创 linux c write函数写入错误,返回 Bad file descriptor
返回错误的文件描述符,原因是因为在open文件的时候未使用O_RDWR(可读可写)对文件进行读写,所以后面写文件会报错。
2022-09-06 09:39:24
4387
原创 计算机网络(第五版)--第四章:网络层
网络层作用:网络层是实现数据交互的地方,但无法进行可靠传输,向上的话,它只提供尽最大努力的交付数据,不提供服务质量的承诺。虚电路(将可靠传输依托于网络):虚电路是一条逻辑链路,是在发送方he接受方之间建立的一条链路,这样保证了数据发送接受不被其他人干扰。虚电路也可以实现数据的可靠传输,但是虚电路要求传输线路同一时刻只能被独占,其他用户想要发送数据就要等待路由器等网络设备空闲,所以虚电路实现的可靠传输对资源的调配要求是很大的,也是复杂的。另一方面,实现可靠传输除了虚电路之外,也有其他方法,就是
2021-06-26 12:12:59
603
2
原创 计算机网络(第五版)--第三章:数据链路层
一、数据链路层所使用的信道分为两种:1.点对点信道。特点:1对1,常用的协议为PPP或CSM2.广播信道。特点:1对多。常用的协议为PPP
2021-06-10 22:24:38
1190
2
原创 计算机网络(第五版)--第一章:概述
计算机网络中数据的发送一般是通过分组交换实现的,在分组交换过程中,路由器会把数据放在其缓存中,然后查找转发表,然后发送给下一个节点。为了进行高效的转发,一般路由器
2021-06-06 11:49:07
299
1
转载 配置samba服务 centos 7
Samba服务程序是一款基于SMB协议并由服务端和客户端组成的开源文件共享软件,实现了Linux与Windows系统间的文件共享。一、安装samba软件并设置开机自启动
2021-05-26 16:48:24
969
原创 交叉编译php-c扩展库(自定义的c扩展)
过程:0.下载php源码并解压,tar -xjvf PHP 7.2.19 (tar.bz2)php源码1.生成扩展骨架:./ext_skel --extname=xianwenjun2.进入扩展目录: cd xianwenjun3.编写扩展代码: vim xianwenjun.c4.修改扩展配置: vim config.m45.phpize编译:/usr/cneos/buildarm64/ft-yinhe-cross/host/aarch64-buildroot-linux-g...
2020-12-24 10:47:55
338
原创 struct结构体对齐和Union联合体的sizeof值
#include <QCoreApplication>#include<iostream>using namespace std;int main(int argc, char *argv[]){ struct B{//1.按最大对齐double 8。 2.结构体对齐严格遵循变量顺序。 char a;//1 看下一个变量,若加起来小于或最大对齐数,则补齐,等于不补。 char c;//1 short b;//2
2020-11-12 10:40:56
404
1
原创 为什么要配置环境变量
配置环境变量是为了在执行某一程序在指定路径找不到时去环境变量path中去找。环境变量分为用户环境变量和系统环境变量。用户环境变量是只能在你计算机当前用户中使用。系统环境变量可以在任何用户中使用。...
2020-09-02 11:23:21
640
原创 Qt常用快捷键
ctrl + U 选中{}当前括号里面的内容,重复按下,会选中当前行。ctrl+j 减少后面与前面的缩进ctrl + tab 切换文件ctrl+m 某行做标记
2020-07-25 15:44:35
280
原创 sizeof运算符注意事项
sizeof是计算数据类型或数组所占字节数量。int a[] = { 1,2,3,4 };cout << sizeof(a)<<endl;特别需要注意的是:在将数组传入函数时,传入的是其首地址,所以对数组形势参数进行运算时结果是数组元素个数。void fun(char mem[], int num){ cout << sizeof(mem)<<endl; //结果为4,即使mem为int也为4 for (int i = 0; i < s
2020-07-25 11:10:52
222
原创 STL---queue队列
队列也是一种逻辑数据结构,其具有先进先出的特性,只能在队的前端进行删除, 在队的后端进行插入。针对这种特性,可以实现一些较为复杂的逻辑。和stack一样,queue不能创建迭代器对象来遍历。因为stack是先进后出,queue是先进先出,**为了不影响这种结构,因此不能通过迭代器进行遍历。但是可以使用普通for循环将队列中每个元素依次pop和front出来达到遍历的目的。**例:for (int j = 0; j < n; j++) { e = q1.front();//q1为queue
2020-07-05 21:08:30
158
原创 数据库语句
1.create dateabase + 数据库名。2.create table +表名(字段。。。。);3.查看表结构:desc +表名4.修改表字段类型:alter table 表名modify column 字段名 修改类型 约束(not null);5.查看全部数据。select *from 表名6.修改表记录:update class set classTeacher = ‘唐欣’ where class_id = 01; //将classTeacher修改为唐欣在class_id =
2020-06-10 16:06:03
276
原创 Qt配置mysql细节及总结
1. 下载Qt:https://download.qt.io/archive/qt/5.15/(注意这点很重要,下载的Qt和Mysql的位数一定要相同,要么都是X86的32位,要么都是X64的64位,不同位的话后面即使你把dll文件放对了位置也找不到数据库驱动)。下面是我Qt的安装包,你可以发现他是X86(32位)的。2. 下载Mysql:https://dev.mysql.com/downloads/windows/installer/8.0.html由于多半大家都会安装X86的Qt,所以安装m
2020-06-03 14:18:34
1248
2
转载 opengl全局坐标和局部坐标理解及程序结果不显示问题
void display(void){ glClear (GL_COLOR_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glPushMatrix(); glutWireSphere(1.0, 10, 10); /* draw sun */// glRotatef ((GLfloat) year, 0.0, 1.0, 0.0); glTranslatef (2.0, 0.0, 0.0); glRotatef ((GLfloa
2020-05-17 13:30:55
281
原创 string class操作
C++ 使用 string 类处理字符串1.string类中的函数(1) 构造(2) 追加(3) 赋值(4) 位置与清除(5) 长度与容量(6) 比较(7) 子 串(8) 搜索(9) 运算符2. 注意事项操作string对象中的字符串内容时,有时会用到“index”。很多string的函数接受两个数字...
2020-05-05 09:37:19
695
原创 Qt --Qfile使用
打开文件,读取#include "widget.h"#include "ui_widget.h"#include<QFile>#include<QFileDialog>#include<QFileInfo> //文件信息#include<QDateTime> //必须要这个头文件。输出时见#include<QDebug>W...
2020-04-24 12:03:38
664
原创 QT信号和槽与Lambda表达式(自定义信号和自定义槽)--子父窗口的切换和独立窗口
subwidget.h#ifndef SUBQWIDGET_H#define SUBQWIDGET_H#include <QWidget>#include<QPushButton>class SubQWidget : public QWidget{ Q_OBJECTpublic: explicit SubQWidget(QWidget *p...
2020-04-15 12:43:06
632
原创 windows编程--时钟
代码:#include<Windows.h> //底层实现窗口的头文件#include<tchar.h>const TCHAR szWindowClass[] = L"第一个窗口";const TCHAR szWindowTitle[] = L"时钟";const int IDM_TOPMOST = 101;const int IDTIMER = 1;#de...
2020-04-02 21:39:03
936
原创 通过STL和仿函数对数组元素排序
什么是仿函数:通过代码进行分析:#include<iostream>#include<iterator>#include<vector>#include<algorithm>using namespace std;#define size 10bool small(int x, int y) { return x > y;...
2020-03-31 13:28:38
239
原创 通过冒泡排序了解函数指针
思路:1.创建一个数组,然后通过rand函数填充10个1~100的数,然后用输出流迭代器ostream_iterator将原始数组元素输出,然后进行冒泡排序,将排序完的数组再用迭代器ostream_iterator输出。2.然后就是冒泡排序(两重循环),第一层循坏是排序的趟数,第一趟取出最大或最小值,然后每比较完一趟就减少最大或最小值,直到所有的数被排序完成。再冒泡排序进行判断的时候,可以使用函...
2020-03-31 11:31:35
248
转载 引用的实质及其与指针的关系(通过指针可修改其引用所指向的值)
1.引用作为变量别名而存在,因此在一些场合可以代替指针2.引用相对于指针来说具有更好的可读性和使用性(2)交换函数实现对比①传入指针:#include <iostream>#include <stdio.h>void swap(int* a, int* b){ int t = *a; *a = *b; *b = t;}...
2020-03-29 16:36:40
468
原创 观察者模式
观察者模式是通过接口间接的实现需要实现的功能,实质是针对接口进行编程。通过银行账户取钱分别发消息给手机,邮箱两个观察者来解读观察者模式。原则:依赖置换原则,1.高层次模块(BankAccount)不得依赖底层模块(Mobile,QQ),两者都应该依赖抽象(AbstractPObserver,一般设为抽象类,通过抽象类指针进行访问)。2.抽象不应该依赖细节,细节应该依赖抽象。意思是要实现...
2020-03-29 16:15:43
173
原创 格雷码与卡诺图化简、真值表--为什么真值表0,1的顺序是固定顺序
格雷码是一种无权循环码。在真值表以及卡诺图化简的时候可以使用,至于为什么真值表0,1的顺序是固定顺序。这就体现了格雷码的优点,每一串格雷码和上一串格雷码只有一位数字的改变。比如:由上图可以发现,格雷码左边的数字不是最先改变,最先变化的是最右边的0变为了1,然后依次改变右边的0或1衍生出新的格雷码,每次只改变一位。这也是为什么真值表的0,1必须要有顺序。卡诺图:至于为什么是m2,因为ABCD...
2020-03-15 12:51:10
5699
1
原创 聚合和组合
组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。...
2020-03-14 16:14:11
128
原创 运算符重载
注意:重载用到ostream时,不能将ostream对象设为const常量,因为此类的成员需要对其他ostream类的方法进行操作。重载加号: Complex operator+(const Complex& A, const Complex& B) { Complex c; c.m_x = B.m_x + A.m_x; c.m_y = B.m_y + A.m_y; ...
2020-03-12 15:02:52
112
原创 php中swap函数用引用和值传递的方式交换两个数
1.(1)引用参数传递的方式,自定义函数实现对两个变量进行交换;调用函数前、后都输出这两个变量的值、以确认交换成功。(2)值参数传递的方式,自定义函数实现对两个变量进行交换、交换后的结果放入一个数组来返回;调用后打印数组来确认交换成功...
2020-02-11 12:09:06
1638
转载 C++学习笔记----3.2 C++引用在本质上是什么,它和指针到底有什么区别
从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参...
2020-02-04 23:22:30
675
VC中的所有WM消息.doc
2020-04-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人