自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 oracle数据库(数据库启动关闭/sqlplus登录及基本操作/设置字符集/distinct去重)

Centos7.5环境Oracle版本: 11GLinux下一些用户:前提条件: 使用Oracle用户登录Linux操作系统数据库管理员用户:用户名:sys密 码:sys。

2025-03-24 08:33:47 1012

原创 Linux高并发服务器开发 第二十天(线程同步 互斥锁 读写锁 条件变量 信号量)

如果访问共享数据的线程,不拿锁,直接访问共享数据,能访问成功。- 线程同步,指一个线程发出某一功能调用时,没有得到结果之前,该调用不返回。当信号量的值为N时,再次++,会阻塞。当信号量的值为0时,再次--,会阻塞,(对比pthread_mutex_lock)( 访问共享数据前,加锁,访问共享数据结束,立即解锁。- 相较于互斥锁而言,读写锁非常适合于,对数据结构读的操作次数,远大于写的操作次数的场景。- 系统提供用户使用的所有的锁,全部为 “建议锁”, 不具备强制性。

2025-02-26 01:06:09 587

原创 Linux高并发服务器开发 第十九天(线程 进程)

组长进程不能作为新会话的首进程,因此 fork() 后,终止父进程,子进程调用 setsid() 创建会话,以自己的进程pid, 为会话id 和 进程组 id。- 应该在被cancel的线程中,调用 pthread_testcancel() 函数来添加 “取消点” (保存点)1. 被 pthread_cancel() 杀死的线程,在使用 pthread_join() 回收,得到的退出值 -1。// 获取线程id, 在进程内部标识线程身份。- 结论:既能使用进程开发,也能使用线程开发的程序,首选 线程。

2025-02-20 02:30:31 889

原创 Linux高并发服务器开发 第十八天(信号及相关概念 信号捕捉)

自定义信号集。清空自定义信号集将自定义信号集,全部置1将一个信号添加到自定义集合中。将一个信号从自定义集合中移除。上述 4 个函数返回值:成功:0, 失败:-1, errno判断一个信号是否在集合中返回值:在:返回 1 --- 真不在:返回 0 --- 假。

2025-02-17 01:16:09 1017

原创 Linux高并发服务器开发 第十七天(管道缓存区查询大小 管道的优劣 命名管道mkfifo 建立释放映射区mmap/munmap 匿名映射 进程间的通信)

2. mmap(NULL, 实际有效文件大小, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);5. 映射区访问的权限设为 MAP_PRIVATE, 对内存做的所有修改,都只在内存有效,不反应的磁盘上。- 类unix系统中没有 MAP_ANONYMOUS 、MAP_ANON 选项,可以借助 /dev/zero 实现。MAP_SHARED: 对共享内存所做的修改,会反应到物理磁盘文件上。MAP_PRIVATE:对共享内存所做的修改,不会反应到物理磁盘文件上。

2025-02-11 01:42:04 846

原创 引用&指针

并不是ref变成了b的别名,因为b本身就是一个值,所以这一步只是将b赋值给ref,同时因为ref是a的别名,所以a也修改了。引用变量某个已存在变量的别名,一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向该变量。指针是一个变量,它存储另一个变量的内存地址。指针可以在运行时被重新赋值,并且可以为空。ref还是a的别名,没有变成b的别名。引用不赋初始值是无法编译通过的。

2025-02-07 13:26:43 406

原创 Linux高并发服务器开发 第十六天(execlp/execl 进程回收/孤儿进程/僵尸进程 wait/waitpid回收 进程间的通信)

=**一次wait、waitpid 调用,只能回收一个子进程!!!!**==想回收 N 个子进程,需要将 wait、waitpid 调用 放于 循环中。

2025-02-07 01:44:18 810

原创 Linux高并发服务器开发 第十五天(fork函数)

全局变量、.data、.text、栈、堆、环境变量、用户ID、进程工作目录、宿主目录、信号处理方式...-跟踪父进程执行逻辑:setfollow-fork-modeparent(默认)-进程ID、fork返回值、进程运行时间、父进程ID、闹钟(定时器)、未决信号集。-跟踪子进程执行逻辑:setfollow-fork-modechild。-fork之后,父、子进程,共同争夺cpu,执行先后顺序随机,如下。-fork后,对于父进程的用户空间的数据,系统采用。父进程:返回子进程id。

2025-01-20 00:40:29 360

原创 Linux高并发服务器开发 第十四天(dup/duo2/fcntl 进程 pcb进程控制块 环境变量)

本质:结构体:structtask_struct{...}----find/usr/src/-namesched.h。-存储目录位置:/usr/src/linux-headers-4.15.0-62/include/linux/sched.h。-将参1的文件描述符,复制覆盖给参2。参1,参2文件描述符指向同一个文件。-进程状态:初始态、就绪态、运行态、挂起态(阻塞)、停止态(终止)-进程:活跃的程序,运行起来的程序。-环境变量语法格式:名=值:值:值:值...

2025-01-15 01:40:46 750

原创 信号槽关联类型(Connection DirectConnection QueuedConnection BlockingQueuedConnection UniqueConnection)

如果信号所在线程和槽函数所在线程不是一个线程,会强制把槽函数拉到和信号所在的一样的线程来执行,并且是同步执行,这时打印的槽函数线程和信号线程ID是一个ID,emit后面的内容需要等到槽函数执行完毕才执行。emit语句后的代码将在全部槽函数运行完成后被运行。阻塞连接:发出信号后,当前线程emit后的程序会阻塞,等待槽函数执行完毕后才继续执行,相当于是不同的线程能够同步起来运行。直接连接:相当于直接调用槽函数,但是当信号发出的线程和槽的对象不再一个线程的时候,则槽函数是在发出的信号中执行的。

2025-01-14 15:19:44 854

原创 Linux高并发服务器开发 第十三天(文件系统概念 stat/lstat truncate link/unlink 目录操作函数(opendir/closedir/readdir))

硬链接计数为0 (没有 dentry对应) 的文件仍不会马上被释放。要等到所有打开该文件的进程运行结束,没有任何进程使用该文件,此时,系统择机释放该文件。- 一组规则,规定对文件的存储及读取的方式、方法。-vi具有穿透性,读取的是mk.soft指向的文件内容,而readlink读取的是mk.soft本身的内容。- 程序运行结束,打开的文件、申请的内存空间,会被系统自动释放。- 大多数的inode保存在磁盘中,少量常用、进期使用的inode保存内存中。- 调用unlink,只是让文件具备了被释放的条件。

2025-01-13 00:22:57 874

原创 Linux高并发服务器开发 第十二天(阻塞/非阻塞 fcntl函数 位图 lseek函数 传入传出参数)

设置 /dev/tty 文件,为非阻塞状态。- 阻塞、非阻塞是 设备文件、网络文件具备的属性(不是read、write的属性)。- 直接拓展文件,也可以使用 truncate() 函数来完成。1. 文件的 “读”、“写” 使用的 同一偏移位置!---- 读常规文件无“阻塞”概念。2. 在函数调用之前,指针指向的空间可以无意义,但必须有效。- 作用:不重新打开文件,修改文件的访问权限。获取文件状态:F_GETFL。// 修改文件权限,重新设置文件权限。3. 在函数内部,先做读操作,后做写操作。

2025-01-10 01:08:39 451

原创 Linux高并发服务器开发 第十一天(读写文件 错误处理函数strerror/perror 预读入缓输出 strace命令 文件描述符)

errno==EAGAIN(或EWOULDBLOCK):以非阻塞读(设备、网络)文件,没读到数据。count:缓冲区大小size_t:无符号整数ssize_t:有符号整数。count:数据大小size_t:无符号整数ssize_t:有符号整数。参:错误号--errnum--当前程序的唯一全局变量。fd:打开的文件描述符————open()返回值。fd:打开的文件描述符————open()返回值。buf:存储读到的数据的缓冲区。

2025-01-07 23:58:55 422

原创 Linux高并发服务器开发 第十天(man手册 系统调用 文件打开&关闭 文件创建权限)

传8进制数,用来描述文件的权限rwx--0664--rw-rw-r---使用open创建文件的最终权限,受mode(参3)和umask共同影响。-Linux系统中,创建文件的权限,受umask文件权限屏蔽码影响。-计算的公式:最终文件权限=mode&~umask。参3:参数3使用的前提是,参2指定了O_CREAT。-本质:内核提供给外部,访问Linux操作的一系列函数。参1:欲打开的文件的路径名(绝对、相对)参1:欲打开的文件的路径名(绝对、相对)

2025-01-07 23:43:54 339

原创 Linux高并发服务器开发 第九天(gdb调试器/基础指令 栈帧)

b(break): b 55 在第55行添加断点。使用跟踪变量的编号。如: undisplay 2 : 取消 2 号变量的跟踪。- disable 2 : 设置编号为 2 号的断点,失效。- enable 3 : 设置编号为 3 号的断点,生效。如: p var ----- 查看 var 变量的值。- b 23 if i = 5 :设置条件断点。- display:设置跟踪变量。- start:不使用断点,直接启动程序,开始单步调试。- delete 1 : 删除 编号为 1 号的断点。

2025-01-06 00:49:51 353

原创 QVector与QList的区别

QVector是一个高效的动态数组,类似于std::vector,QVector是QList的别名,它提供了与QList相似的函数,但在某些情况下性能更好。它可以自动调整大小以适应数据的数量,并且支持快速的随机访问。List是一个动态数组,类似于std::list,可以自动调整大小以适应其包含的项目。可以存储任何类型的对象,并提供了访问和操作列表中元素的函数。由于它是基于指针实现的,所以插入和删除元素的效率比QVector更高。适合小型数据、频繁插入和删除操作的场景,但在随机访问性能和内存效率上稍逊一筹。

2025-01-03 10:44:00 488

原创 数据对齐详解

有了这些值,我们就可以很方便的来讨论具体数据结构的成员和其自身的对齐方式。有效对齐值N是最终用来决定数据存放地址方式的值,最重要。有效对齐N,就是表示“对齐在N上”,也就是说该数据的"存放起始地址%N=0".而数据结构中的数据变量都是按定义的先后顺序来排放的。第一个数据变量的起始地址就是 数据结构的起始地址。结构体的成员变量要对齐排放,结构体本身也要根据自身的。对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。

2025-01-02 10:42:07 631

原创 Linux高并发服务器开发 第八天(makefile的规则 wildcard/patsubst函数 普通变量/自动变量/其他关键字)

定义变量语法:变量名 = 变量值 (都是字符串)- 举例:foo = abc- 取变量值语法:$(变量)- 举例:bar = $(foo) ===> bar = abc- makefile 自带变量:- CC = cc- CFLAGES- LDFLAGES。

2024-12-31 00:29:50 374

原创 Linux高并发服务器开发 第七天(静态库 动态库)

机制:代码共享。- 优点:节省内存(共享)、易于更新(动态链接)- 缺点:相较于静态库而言,函数调用速度慢(函数地址“延时绑定”)- 使用场景:1. 对程序执行速度要求不是很强烈,而对系统资源有一定要求的场景。2. 对应更新比较频繁程序。1. 停止运行程序2. 使用新库覆盖旧库(保证新库、旧库名称一致。接口一致。3. 重启程序。

2024-12-30 00:28:09 985

原创 Linux高并发服务器开发 第六天(rwx 对于目录和文件的区别 gcc编译器 动态库静态库)

将 源文件,展开 头文件、替换宏(变量宏、函数宏)、替换 空行、空格、table、注释。- 我们使用的函数: 标准C库:/lib/x86_64-linux-gnu/libc.so.6。- **-l(小L):指定库名。- 将 .o 的目标文件,链接库文件、数据段合并,地址回填。- -S: 编译选项,如果编译无误,生成 .s 汇编文件。- -c:只生成目标文件(过程包含:预处理、编译、汇编)- **-I(大i): 指定 头文件所在目录位置。- -D:在编译期间动态的向程序中,注册变量宏。

2024-12-26 01:26:42 608

原创 Linux高并发服务器开发 第五天(压缩解压缩/vim编辑器/查找替换/分屏操作/vim的配置)

Linux 操作系统,默认支持的 压缩格式:gzip、bzip2。- 压缩时,压缩包的后缀名,系统不做强制要求。- 在 Linux/unix 中 压缩、解压缩,借助 tar 命令来完成。- z: 使用 gzip 压缩格式。- 格式:tar zxvf 压缩包名.tar.gz** —— 直接解压缩到 当前目录。- **NG: 不改变工作模式, 跳转至第 N 行。- 在此种模式下,键入的指令,都被当做末行命令。- 0:不改变工作模式,将光标移动至本行行首。- $:不改变工作模式,将光标移动至本行行尾。

2024-12-22 23:02:34 735

原创 Linux高并发服务器开发 第四天(wc/whoami命令 权限修改chmod 添加/删除用户(组) 切换用户 修改文件所有者/所属组 查找/过滤)

在 /etc/passwd 文档的末尾处,新增 新用户相关信息(用户uid、用户组 gid、宿主目录、默认解析器)- /home 目录下,新用户的 宿主目录, 不会自动被系统删除。find ./ -size +3M -size -5M(大于3M小于5M)- root 用户的切换,除上面的方法,之外 ,还可以使用 sudo su。- 注意:-maxdepth 应该放在其他的参数前面。- /etc/passwd 文件中,会对应删除相应用户数据。- /etc/group 文件中,会对应删除相应用户组数据。

2024-12-15 00:46:51 878

原创 Linux高并发服务器开发 第三天(文件操作命令touch/mkdir/which/rmdir/rm/cp/mv/cat/more/less/tail 硬链接/软连接ln命令)

1.其他文件操作命令。

2024-12-13 01:17:49 883

原创 Linux高并发服务器开发 第二天(ls命令 linux下的文件类型/文件访问属性)

软件和更新 —— 下载自 —— 下拉框 —— 选择“其他站点” —— 推荐使用 阿里云 软件源。—— “http://mirrors/aliyun.com/ubuntu” —— 第一次选择,需要更新。- 在终端内部, Ctrl + shift + “+”/放大、 Ctrl + “-” 缩小字体。每组 rwx ,没有对应权限时,使用 “-” 占位。- 所属组:默认,A用户产生后,自动产生A用户组,将 A 用户,添加到 A 用户组。- 简单设置:虚拟机 —— 设置 —— 网络适配器 —— NAT 模式。

2024-12-11 23:48:28 731

原创 Linux高并发服务器开发 第一天(Linux的目录结构 cd用法 终端提示符格式)

当前在 /home/itcast/bj_40 目录中, 使用 cd .. 进入 /home/itcast 中。“宿主目录” —— /home/itcast —— 也叫 “家目录”“宿主目录” —— /home/lisi —— 也叫 “家目录”- 当前在 /home/itcast/bj_40 目录中, 使用 cd . 目录不变。- 测试命令 sudo cat /etc/input/mice ---- 要求输入密码。- 举例:cd /bin 或 cd /home/itcast。

2024-12-10 23:34:11 661

原创 Qt桌面应用开发 第十天(综合项目二 翻金币)

需求如下:开始按钮,初始时为一个图片,按下显示为另一个图片。需求:按钮点击后,可以向上向下跳动。

2024-12-03 00:00:07 546

原创 Qt桌面应用开发 第九天(综合项目一 飞翔的鸟)

鸟类中:设置一个定时器,每0.7秒超时一次,超时后加载小鸟图片,并发出切图信号。①鸟类中包含鸟图片、鸟图片的最小值下标和最大值下标。主程序中:只要小鸟对象发出切图信号,就刷新一次。②将鸟的图片资源加载到对应项目下的文件中。③将鸟类对象添加到主窗口中。

2024-11-27 01:20:37 393

原创 Qt桌面应用开发 第八天(读写文件 文件编码 文件流)

需求:一个pushButton,点击之后可以选择一个txt文件的路径,路径会显示在lineEdit上,txt文件的内容会显示在textEdit上。读取其他格式的文件时,需要将文本设置为指定的格式再进行读取,如“gbk”格式。QFileInfo提供了文件名称、位置、后缀名、是否为目录等信息,可以获取文件大小、最后修改时间、读取时间。用于处理二进制数据,可以序列化Qt的数据类型为二进制格式,并能从二进制格式中反序列化它们,处理文本数据,对Qt的字符串和I/O类进行了优化,可以使用读写数据。

2024-11-26 00:51:53 570

原创 Qt桌面应用开发 第七天(绘图事件 绘图设备)

继承QPixmap,色深是1(只能用一位二进制数表示颜色,即0或1),即表示的颜色只有两种,黑和白,占用存储空间很少,故适合做光标文件和笔刷。绘制图片,也就是将已有资源图片,绘制到窗口中,利用QPainter在QLabel上绘制图片,主要调用drawPixmap。需求:利用QPainter绘制点、线、圆、矩形、文字;需求3:再次移动画家,restore恢复画家状态,绘制矩形Qrect(20,20,50,50)需求1::绘制两个原型,一个普通,一个抗锯齿效果。需求2:将50-100像素的点改为红色。

2024-11-24 22:34:19 1436 1

原创 Qt桌面应用开发 第六天(鼠标事件 定时器事件 定时器类 事件分发器 事件过滤器)

需求:一个label,初始值为1,每隔0.5秒加一;——启动定时器,单位是毫秒,startTimer会返回一个int类型的唯一标识。需求:两个label,初始值都为1,第一个每隔一秒加一,第二个每隔一秒加二。扩展1:鼠标按下,释放,移动时,分别打印鼠标相对于Label的x、y坐标。扩展2:在MyLabel中鼠标只要移动,就会触发移动事件,不需要按下。鼠标按下、释放是瞬间触发的,移动是一个持续性事件。扩展3:鼠标左键按下时,才会触发相应内容。举例:重写鼠标进入离开事件。

2024-11-21 02:04:49 612

原创 Qt桌面应用开发 第五天(常用控件 自定义控件)

要求:选中“环境优雅“”时,输出“选择环境优雅”;取消“环境优雅“”时,输出“取消环境优雅”;半选“环境优雅“”时,输出“半选环境优雅”存储多个子窗口,每个抽屉可以设置图标和标题,并且对应一个子窗口,通过抽屉按钮可以实现各个子窗口显示的切换。注意:CheckBox通过stateChanged这个信号来判断按钮的选择状态,0未选中,1半选,2全选。堆栈窗口控件,只有一个子窗口是可见的,其他子窗口被隐藏,可通过切换显示不同的子窗口。要求:默认默认选择男的;选择女的之后,输出“选择女”滚动条,水平/垂直滚动条。

2024-11-18 00:42:51 1083

原创 Qt桌面应用开发 第四天(对话框 界面布局)

没有释放窗口对象,可以设置属性,在关闭非模拟对话框时,将对话框对象释放;若非模拟对话框创建在。QFileDialog::getOpenFileName创建文件对话框。QColorDialog::getColor()创建颜色对话框。打开非模拟对话框时,可以操作其他窗口。会阻塞同一应用程序中其他窗口的输入。在上述案例中,对话框创建在。

2024-11-15 01:21:15 731

原创 Qt桌面应用开发 第三天(QMainWindow)

除了菜单栏,工具栏,状态栏,铆接部件,中心显示的都可以作为核心部件,核心部件只有一个,但是可以由多个小控件组成。为用户提供主窗口程序的类。主窗口的铆接部件也是浮动窗口,可以有多个。注意:铆接部件的停靠依赖于核心部件。,位于主窗口顶部,标题栏下面。主窗口的工具栏可以有多个。主窗口的状态栏最多只能有。

2024-11-08 03:03:00 602

原创 Qt桌面应用开发 第二天(信号和槽 Lambda表达式)

QString输出时字符会带双引号,转为char*会去掉双引号(先转为QByteArray类型,再转为char*)connect(信号的发送者,发送的信号,信号的接受者,处理的槽函数)信号的发送者——信号——信号的接受者——信号的处理(槽函数)mutable关键字:可以修改按值传递的。利用函数指针明确指向函数的入口地址。举例:老师饿了,学生请吃饭。

2024-11-07 01:06:50 371

原创 Qt桌面应用开发 第一天(默认代码解析 命名规范与快捷键 按钮控件及窗口设置 对象树 坐标系)

Qt是一个跨平台的C++图形用户界面。

2024-11-04 01:10:10 638

原创 C++核心编程和桌面应用开发 第十八天(一元/二元谓词 内建函数对象 算术/关系/逻辑仿函数 函数适配器/取反适配器/函数指针适配器/成员函数适配器)

概念:STL内建了一些函数对象,可以直接使用,需要引入#include,内建函数对象和普通函数对象用法一样。算术仿函数实现的是四则运算,negate是一元运算,其他都是二元运算。函数对象使用重载的()时,行为类似函数调用,也叫仿函数。概念:重载函数调用操作符的类,其对象称为函数对象。概念:返回bool类型的仿函数或普通函数称为谓词。若仿函数或函数参数只有一个,那么是一元谓词。是将成员函数入口地址,适配成全局函数。本质:函数对象(仿函数)是一个。关系仿函数实现关系对比。

2024-11-03 01:37:44 954

原创 C++核心编程和桌面应用开发 第十七天(set和multiset容器 pair map和multimap容器)

与list类似。

2024-10-30 01:13:15 915

原创 C++核心编程和桌面应用开发 第十六天(list)

注意:STL中的排序算法 sort(begin(),end())只支持随机访问迭代器的容器,list是双向迭代器,但它内部有提供list.sort()排序,两种不同。list是物理存储单元上非连续的存储结构,通过链表中的指针链接,链表由结点组成,一个是。注意:list的插入、删除都不会使原有list迭代器失效,但vector不成立。注意:交换时,list中存储的数据类型必须和原数据类型相同。注意:STL中list的迭代器只支持前移和后移,属于。注意:可以利用回调函数或仿函数改变函数默认规则。

2024-10-29 00:39:15 585

原创 C++核心编程和桌面应用开发 第十五天(deque/stack/queue)

deque内部有个中控器,维护每段缓冲区的内容,缓冲区中存放真实数据,中控器维护缓冲区的地址。stack(栈)是先进后出,只有一个栈顶的出口,因此栈不允许遍历操作。注意:deque没有容量的概念。

2024-10-25 01:23:39 365

原创 C++核心编程和桌面应用开发 第十四天(vector\string)

1.特点string类内部封装了很多成员方法,例如,查找find,拷贝copy,删除delete,替换replace,插入insert等string管理char*所分配的内存,不用担心复制越界和取值越界,由类内部进行负责2.string和char*区别char*是一个指针string是一个类,类内部封装了char*,管理这个字符串,一个char*型的容器。

2024-10-22 00:19:07 91

空空如也

空空如也

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

TA关注的人

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