自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 qrc文件管理资源

Qt在编译项目的时候,就会根据qrc中描述的图片信息,找到图片内容,并提取出图片的二进制数据,把这些二进制数据转成C++代码,最终也会被生成在exe文件中。如果资源比较大 (比如是几个 MB 的文件), 或者资源特别多,生成的最终的 exe 体积就会比较大, 程序运行消耗的内存也会增大, 程序编译的时间也会显著增加。通过绝对路径的方式引入图片是不科学的,你写的程序,最终是要发布到用户的电脑上的,你无法确保,你的开发机上图片的路径和用户电脑上图片的路径完全一致。2.在 qrc 编辑器中, 添加前缀。

2025-08-12 14:00:00 488

原创 Qt界面优化

QSS 中的样式属性非常多,不需要都记住,核心原则还是用到了就去查,大部分的属性和 CSS 是非常相似的,文档的 Qt Style Sheets Reference 章节详细介绍了哪些控件可以设置属性,每个控件都能设置哪些属性等。很明显,实现同样的功能,伪类选择器要比事件的方式简单很多,但是不能就说事件机制就不好. 事件可以完成的功能很多,不仅仅是样式的改变,还可以包含其他业务逻辑.,这一点是伪类选择器无法替代的。而第二个按钮只有颜色样式,说明针对第一个按钮,两种设置方式设置的样式,叠加起来了。

2025-08-11 14:00:00 648

原创 【Qt窗口】

上述程序如果关闭,对象树释放,此时进程也就结束了,进程结束,自然所有内存都回收给系统了,上述内存泄露也不会造成太大影响,但是如果这样的代码出现在一个多窗口的程序中,如果涉及到窗口的频繁跳转切换,窗口的频繁创建销毁,上述内存泄露就会相对较为严重,其实现在计算机内存存都很充裕,上述内存泄漏问题都还好。如果创建在堆上,即使给QDialog对象设置了父类QDialog对象,但是在程序没有结束之前,点击了很多次,多次打开对话框,对象树不会销毁,堆上创建的对象也不会被销毁,此时就会有内存泄露的风险。

2025-08-10 02:00:00 843

原创 QT系统相关

程序是运行在操作系统上的,需要操作系统给我们提供支撑,Qt是跨平台的C++开发框架,Qt封装了操作系统API,所以需要学习Qt系统提供的API1.Qt中的事件,是一个图形化界面中用户操作和程序交互的一个核心机制,Qt中的事件是对系统中的事件的一个封装。2.Qt中的文件操作,C++标准库也提供了文件操作,但是Qt提供的文件操作更加丰富。3.Qt中的多线程编程4.Qt中的网络编程5.Qt中的多媒体,例如视频和音频的播放。

2025-08-09 14:26:29 681

原创 Qt常用控件

之前创建对象是创建在堆上,目的为了确保控件的声明周期足够,设置进对象树中,可以通过对象树来管理,来释放对象,QIcon对象创建出来后,一旦设置到顶层 widget 中,QIcon对象本身释不释放,不影响图标最终的显示,并且QIcon对象也不能设置进对象设置进对象树中,所以QIcon对象创建在栈上,函数已结束对象就销毁。此处也要注意,设置行和列的时候,如果设置的是一个很大的值,但是这个值和上一个值之间并没有其他的元素,那么并不会在中间腾出额外的空间。程序还没有报错,这个问题就埋藏下来了。

2025-08-04 14:21:39 909

原创 Qt—信号和槽

Qt在引入信号槽机制,初心就是为了能够让信号槽之间按照“多对多”的方式进行关联,但其实在GUI开发过程中,“多对多”这件事,其实是一个“伪需求”,在实际开发中很少会用到,绝大部分情况,都是一对一,其他的GUI框架往往也不具备这样的特性,所以信号槽并不是Qt的优点。代码写到这里运行会发现并没实际的改变,我们只是进行了信号和槽的连接,并没有发出信号,Qt内置的信号,当用户在GUI进行某些操作,就会自动触发对应的信号,这是因为发射信号的代码已经内置到了Qt框架中,

2025-07-22 14:00:00 574

原创 【初识Qt】

如果你当前程序界面,界面内容是比较固定的,此时就会以图形化的方式来构造界面,但是如果你的程序界面,经常动态变化,此时就会以代码的方式来构造界面,在实现的过程中哪种方式方便就使用哪种方式,而且这两种方式也可以配合使用,先通过图形化界面的方式将大体的框架搭建好,然后通过代码的方式填充框架中的细节内容。Qt Quick是Qt新搞出来的开发GUI程序的方式,传统的开发GUI程序的方式是Qt Widget,接下来学习的是Qt Widget这种方式,Qt Quick是比较新的方式,目前还没有普及。

2025-07-21 14:00:00 752

原创 Qt的安装和环境配置

国内清华源:[https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/](https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/)Qt SDK的下载链接:[http://download.qt.io/archive/qt/](http://download.qt.io/archive/qt/)QT开发环境的搭建,需要安装3个部分,C++编译器、Qt SDK(SDK是软件开发工具包)、QT的集成开发环境(IDE)

2025-07-20 15:44:15 420

原创 Git--本地仓库的学习

stage称为暂存区,也称为索引(index),add会将工作区中的修改(修改包括新增、删除、修改)的内容添加到暂存区中(在版本库中还有一个object库(对象库),修改的工作区内容会写入对象库的一个新的git对象中,add会做的事:将工作区中修改的内容写入到对象库中,然后暂存区中的指针指向修改的对象),将内容添加到暂存区中,还不算将内容添加到版本库中,只有commit操作之后才算将文件提交到仓库中(commit做的事:让master中的指针指向对象库中的修改的对象)

2025-07-18 12:51:29 1021

原创 URL和URI

授权信息(authority,可选):权威部分可选,它通常包含访问资源所需的主机名(域名或 IP 地址)和可选的端口号,格式为 用户名:密码@主机名[:端口号]。片段标识符(fragment,可选):有些地方也成Anchor(锚点),片段标识符是可选的,用于标识文档内部的位置或锚点。片段表示符(Fragment):也称锚点(anchor),是URL的可选部分,用于指向资源中的特定部分或位置。可以理解为URL是URI的一个子集,所有的URL都是URI,但不是所有的URI都是URL。

2025-07-08 14:00:00 1053

原创 仿mudou库one thread oneloop式并发服务器

我们所要实现的是一个高并发服务器的组件,使服务器的性能更加高效,是一个高并发服务器的组件,并不包含实际的业务。首先需要先明确我们所要实现的目标是什么第一点,实现一个高并发的服务器第二点,在服务器的基础上提供应用协议的支持HTTP服务器。

2025-07-07 20:37:24 580

原创 IO多路转接

边缘触发 Edge Triggered 工作模式,如果在将 socket 添加到 epoll 描述符的时候使用了 EPOLLET 标志,epoll 进入 ET 工作模式,当 epoll 检测到 socket 上事件就绪时, 必须立刻处理,如上面的例子,虽然只读了 1K 的数据,缓冲区还剩 1K 的数据,在第二次调用 epoll_wait 的时候,epoll_wait 不会再返回了,也就是说在ET 模式下, 文件描述符上的事件就绪后,只有一次处理机会,只支持非阻塞的读写。LT模式下fd阻塞或者非阻塞都行。

2025-06-27 14:00:00 772

原创 Reactor

线程池处理一个任务的时候,主线程中的Reactor又有数据到来了,线程池处理的任务恰好是同一个文件描述符,就有可能出现线程安全的问题,可能同时向同一个连接中的输出缓冲区写入(由于读事件是Reactor线程从套接字中读的,所以读到的数据是不存在乱序的,线程池中的多个线程从connection的输入缓冲区拿数据存在线程安全的问题),还存在同时向套接字中写入(还有线程池中的线程在向套接字写入时,Reactor所在的线程也在写入),导致数据出现错乱,所以需要对写入缓冲区和输出缓冲区进行加锁。Log.hpp日志类。

2025-06-26 14:00:00 1986

原创 五种IO模型

recv的MSG_DONTWAIT标志仅影响本次调用,不会修改fd本身的阻塞模式,后续不指定MSG_DONTWAIT的recv调用仍会遵循fd原有的阻塞属性(即阻塞模式)。将文件描述符设置为非阻塞属性。

2025-06-25 15:00:00 392

原创 MySQL复合查询

拼接后就形成了一张表,第一个人是SMITH,是20号部门的,但是拼接时拼接了10号、20号、30号等部门信息,只有拼接的20号部门这一条信息是有意义的,对于其他没有意义的信息是没有存在的必要的。这样的查询方式显的很粗糙,在一条sql语句的内部再支持select的查询,这样的查询称为子查询,执行时先执行内部的select,由内向外执行。案例:查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的。案例:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。

2025-06-10 14:00:00 949

原创 MySQL的事务

假设一种场景:你毕业了,学校的教务系统后台 MySQL 中,不在需要你的数据,要删除你的所有信息, 那么要删除你的基本信息(姓名,电话,籍贯等)的同时,也删除和你有关的其他信息,比如:你的各科成绩,你在校表现,甚至你在论坛发过的文章等。因为隔离性实现是对数据加锁完成的,而insert待插入的数据因为并不存在,那么一般加锁无法屏蔽这类问题),会造成虽然大部分内容是可重复读的,但是insert的数据在可重复读情况被读取出来,导致多次查找时,会多查找出来新的记录,就如同产生了幻觉。执行中出现问题,可以随时回滚。

2025-06-09 14:00:00 916

原创 MySQL用户管理

如果只有root用户,所有人都使用root账户来登录MySQL数据库,这样所有人都可以操纵所有的库,这样风险太大,让张三只能操纵mytest这个库,李四只能操纵msg这个库。如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户。host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆。: 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)MySQL中的用户,都存储在系统数据库mysql的user表中。*_priv: 用户拥有的权限。

2025-06-08 14:00:00 360

原创 MySQL连接

在编译时报出未定义’mysql_get_client_info’,这是因为在编译时要链接动态库,对于g++编译器在默认情况下只会链接C/C++的库,对于第三方库需要指定那个路径下的哪个名称的动态库。执行完select语句后,会将拿到的数据保存到my中,然后通过mysql_store_result()将数据转储到MYSQL_RES类型的对象中。MySQL官方提供的文档(对数据库连接库的介绍)的链接,官方文档涉及到对接口、相关结构体变量的介绍。连接成功返回传入的mysql对象的地址,连接失败返回NULL。

2025-06-07 14:00:00 385

原创 表的内外连接

案例:对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来。其实也可以不需要右外连接,因为将两张表进行位置改变,继续使用left join也是一样的。现有这样一个案例查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来。案例:列出部门名称和这些部门的员工信息,同时列出没有员工的部门。如果联合查询,左侧的表完全显示我们就说是左外连接。如果联合查询,左侧的表完全显示我们就说是左外连接。案例:显示SMITH的名字和部门名称。

2025-06-05 14:00:00 527

原创 MySQL内置函数

插入数据后发现表中有些地方是乱码的,这时就可以来查一下编码格式,表中的编码格式一般就两种,一种是针对字符串、汉字的例如utf-8,一种是针对数字的二进制编码。在查询时也不能通过’hellobit’直接查找,这样是在表中找不到的,因为表中存储的是摘要后的32位字符串,查找时也是用摘要后的字符串来查找。要求将exam_result表中以“考生姓名:XXX,总分:xxx,语文成绩:xxx,数学成绩:xxx,英语成绩:xxx”这样的格式显示出来。这里birthday类型是date,记录的是年月日的数据日期。

2025-06-03 14:00:00 519

原创 MySQL基础查询

先执行的是form exam_result语句,因为需要知道从哪个表中选,在执行where total < 200语句,要进行筛选就需要知道筛选条件,所以在执行total < 200,还没有进行重命名,所以就不知道total是谁。不建议全列查询,原因数据库服务端在服务器上的,在公司中数据库中的数据很多,如果全列查询,网络传输数据需要占用大量的网络资源,并且本地电脑会造成刷屏现象。如果插入的新数据和旧数据发生冲突,先将旧数据删掉,重新插入新数据,如果没有冲突直接插入。可以看到是不行的,为什么呢?

2025-06-01 14:00:00 1405

原创 MySQL表的约束

假设有一个学生信息表,这个表中除了又该学生的学号、性别、电话等,还应该要有该学生是在哪个班的字段,以及这个班的一些信息字段,每次插入一条信息,班级字段要插入“计科4班”,这样数据会出现冗余,而且插入的班级没有这个班级呢如,插入“计科10”,但是没有这个班级,但向表中插入,MySQl数据库是不会报错的是能够插入成功,这样就需要程序员在向表中插入数据时先判断有没有这个班级。auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。

2025-05-30 14:00:00 699

原创 MySQL数据类型

最大存储65535个字节,而不是字符个数,当表的编码是utf8时,utf中一个字符占用3个字节,所以varchar(n)的参数n最大值是65532/3=21844。char是固定长度字符串,即使数据的字符串长度没有超过L,存储的时候也是L长度的存储空间,varchar是可变长度字符串,数据字符串长度是多少存储时也是按这个长度来存储的,是根据实际情况来定的。在插入数据时hobby插入的是0,是空串,如果插入不能存在的值是会插入失败的。由于online设的是1个bit,所以只能插入0和1,插入3时就存不下了。

2025-05-29 14:00:00 711

原创 MySQL表的约束

假设有一个学生信息表,这个表中除了又该学生的学号、性别、电话等,还应该要有该学生是在哪个班的字段,以及这个班的一些信息字段,每次插入一条信息,班级字段要插入“计科4班”,这样数据会出现冗余,而且插入的班级没有这个班级呢如,插入“计科10”,但是没有这个班级,但向表中插入,MySQl数据库是不会报错的是能够插入成功,这样就需要程序员在向表中插入数据时先判断有没有这个班级。auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。

2025-05-21 14:40:23 938

原创 【项目】—高并发内存池

当前项⽬是实现一个高并发的内存池,原型是google的一个开源项目tcmalloc,tcmalloc全称 Thread-Caching-Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,我们这个项目是把tcmalloc最核心的框架简化后拿出来,模拟实现出⼀个自己的高并发内存池。以服务器上的线程池为例,它的主要思想是:先启动若⼲数量的线程,让它们处于睡眠状态,当接收到客户端的请求时,唤醒池中某个睡眠的线程,让它来处理客⼾端的请求,当处理完这个请求,线程⼜进⼊睡眠状态。

2025-05-20 14:00:00 980

原创 MySQL数据类型

最大存储65535个字节,而不是字符个数,当表的编码是utf8时,utf中一个字符占用3个字节,所以varchar(n)的参数n最大值是65532/3=21844。char是固定长度字符串,即使数据的字符串长度没有超过L,存储的时候也是L长度的存储空间,varchar是可变长度字符串,数据字符串长度是多少存储时也是按这个长度来存储的,是根据实际情况来定的。在插入数据时hobby插入的是0,是空串,如果插入不能存在的值是会插入失败的。由于online设的是1个bit,所以只能插入0和1,插入3时就存不下了。

2025-05-16 13:30:00 779

原创 【表的操作】

在数据目中有三个不同的文件,分别是: users.frm:表结构 users.MYD:表数据 users.MYI:表索引。更改某一列属性后,再次查表信息,没有了描述,这是因为更改时没有加描述,将数据库中记录用新的属性信息覆盖掉。向user表中再新增image_path列,属性,描述,新增的这一列放在birthday这一列的后面。将名为name列修改成为名为xingming,但是修改时需要完整的定义还要有属性。不同的存储引擎,创建表的文件不一样。查看当时在建表时的详细信息。修改表中某一列的属性。

2025-05-15 13:30:00 178

原创 数据库的操作

字符集是向数据库中写入数据时的编码格式,我们对数据库会进行查找、提取这样的操作,查找和提取就需要对比,要对比就需要先读取出来,以哪种编码格式写入,就需要以对应的校验格式读出,创建数据库时如果不指定编码格式和校验格式,默认使用配置文件指定的编码规则。同时备份多个数据库如果备份一个数据库时,没有带上-B参数,在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。如果该名称的数据库不存在则创建数据库,存在则不创建数据库。备份的不是整个数据库,而是数据库中的一些表。查看数据库支持的字符集。

2025-05-14 13:30:00 346

原创 MySQL数据库基础

它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。mysql能够跨网络访问,-h数据库服务所在主机的IP地址-P数据库服务的端口号-u以什么身份登录-p密码,去掉-h选项mysql -u root -p默认连接本地服务器上的mysql数据库。主要用在电商,SNS,论坛。对简单的SQL处理效果好。PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。

2025-05-13 13:30:00 197

原创 CentOS下安装MySQL数据库

在CentOS上通过yum源获取的安装包都是以.rpm为后缀的格式,通过rpm命令查看mysql的安装包。看到没有与我们操作系统相对应的版本,直接下载el7.rmpCentOS7的yum源。登录方法一:当我们安装MySQL时会给我们生成一个临时的密码,查看临时密码然后登录。登录方法二:如果你安装的最新的mysql,就没有所谓的临时密码,直接登录。这里是登陆上了,但是对于新版本的MySQL是没有临时密码的。查看mysql进程的相关信息,mysql程序是否正在运行。可以看到并没有MySQL相关的yum源。

2025-05-12 13:48:43 1942

原创 传输层UDP协议

我们注意到, UDP 协议首部中有一个16 位的最大长度,也就是说一个UDP 能传输的数据最大长度是64K(包含UDP 首部),然而64K 在当今的互联网环境下是一个非常小的数字,如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装。UDP协议是向套接字一次写多少的数据,一次就传多少的数据,接收端也只能一次recvfrom,不能分多次recvfrom。UDP 具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP 报的顺序和发送UDP 报的顺序一致;

2025-05-06 14:00:00 362

原创 应用层协议HTTP

Host字段:就是IP地址+端口,客户端告知服务端,所要找的资源是在哪个服务器的端口上的,这里就有人好奇了,资源难道没有在浏览器给发起请求的IP地址+端口主机上的服务端吗?这里可以在该IP地址+端口主机上的服务端,也可以不在,请求的资源在另一个IP地址+端口服务器的服务端上,该服务器相当于充当另一台服务器的客户端,将浏览器发来的请求,提取出Host字段,将浏览器发出的请求发送给Host字段中的服务器上的服务端,做出响应后,发送给充当客户端的服务器,充当客户端的服务器再把响应发送给客户端。

2025-05-05 14:30:00 1842

原创 TCP网络编程

sockfd是用来获取连接的,将_sockfd传给accept(),accept()返回一个sockfd,未来和远端主机进行通信的是返回的sockfd,_sockfd我们一般称listen sockfd监听套接字,sockfd,_sockfd获取的链接越多,返回的sockfd越多。先创建一个管道文件,然后创建一个子进程,子进程中做命令字符串解析,然后执行命令,命令执行后的结果写到管道文件中,为了上层能够拿到命令执行后的结果,返回这个管道文件的指针。第四个参数 size:自己定义的缓冲区的大小。

2025-05-04 14:30:00 691

原创 应用层自定义协议序列与反序列化

第二种约定方案:定义结构体来表示我们需要交互的信息, 发送数据时将这个结构体按照一个规则转换成字符串, 接收到数据的时候再按照相同的规则把字符串转化回结构体。操作系统内核能够以这种方式进行通信的原因:操作系统都是用C语言写的,操作系统一旦写好,基本不会做改变,使用这种协议进行本地通信实现起来简单。这个报错是链接报错,gcc、g++默认是认识C/C++库,但不认识第三方提供的库,在makefile文件中添加。序列化和反序列化的工具:Jsoncpp用于将数据序列化为字符串的C++库。Log.hpp(日志)

2025-05-03 13:39:22 839

原创 UDP网络编程

建议服务器端绑定IP地址时绑定INADDR_ANY(就是0),因为该服务器上可能存在多个IP地址,如果只绑定了IP1地址,那么只能收到来自IP1地址的信息,绑定INADDR_ANY(就是0)表示信息无论来自IP1还是IP2都能收到。第一个参数sockfd,socket文件的文件描述符,表示从那个socket文件中读取;半双工通信:可以实现双向的通信,但不能在两个方向上同时进行,必须轮流交替地进行。单工通信:发送端只能发送信息,不能接受信息,接收端只能接收信息,不能发送信息。

2025-05-03 13:28:57 964

原创 Linux多线程

所有的线程要能够加锁要保证所有的线程能够看到锁,所以锁必须是共享资源,加锁的过程必须是原子性(原子性:只有两种状态,要么没有执行,要么执行完成,不会出现中间状态,一条指令就能够完成的具有原子性,两条以上指令才能执行成功就不具有原子性,因为执行完第一条指令可能会被切走,此时是执行了但还没有完成,处于一种等待的状态),也就是一个线程正在加锁的过程中,其他线程不能进行加锁。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变;

2025-04-01 15:00:00 856

原创 【线程池】

如果其他线程进入不会出现问题该函数称为可重入,如果多线程并发执行该函数造成问题那么该函数不可重入,带来的结果是该线程不安全,所以一个函数是可重入的那么访问的线程一定是安全的,线程安全不一定函数是可重入的,可能是不重入但加了锁。两个线程在持有自己的锁的情况下申请对方的锁,这就造成了两个线程拿着自己的锁进入到对方锁的阻塞队列中,形成了一个死扣,这样两个线程会永远处于一种等待的状态。提高线程的可管理性:线程池可以统一管理线程,包括线程的创建、调度、执行、销毁等,简化了并发编程的复杂性。

2025-03-26 15:33:16 742

原创 【进程信号】

对9号信号设置屏蔽是不会起作用的,原因如果对所有的信号设置屏蔽且起作用,并且该信号的执行动作时一个死循环,那该进程就无法被终止。函数sigfillset初始化set所指向的信号集,使其中所有信号的对应bit置位,表示该信号集的有效信号包括系 统支持的所有信号。随时都可以向进程发送信号,进程收到后能够识别该信号的含义,如果进程正在作重要的事情,所以可能需要保存信号,并不会立即执行该信号。信号捕捉有一特点:在执行信号的处理方法时,再发同一信号会将该信号自动屏蔽,信号方法执行完之后自动解除对该信号的屏蔽。

2025-03-21 14:04:04 935

原创 【进程间通信】

双向通信,父子进程都可以进行读写,子进程需要读取父进程写的,父进程需要读取子进程写的,哪那些是父进程写的,进程间通信设计成通道是为了简单,但如果设计成双向通信就变复杂了。共享内存的大小是自由设置的,但是操作系统申请的实际空间只能是4096的整数倍,。如上父子进程都能够读写一个内核级文件缓冲区,该文件称为管道文件,管道在设计时只允许单向通信,例如:父进程给子进程发数据,最开始父进程是以读和写两种方式打开管道文件的,父进程需要关闭以’r’方式打开的文件,子进程需要关闭以’w’方式打开的文件。

2025-03-14 13:32:44 1072

原创 【文件系统】

"代表上级目录,进入到dir下的a目录中,cd…要想找到myshell文件就得知道"myshell"与inode编号映射关系,所以要先找到linux文件,要想找到linux文件先要找到qian文件,要想找到qian文件先要找到home文件,想要找到home文件就要先找到根目录,根目录的inode编号是操作系统设计是制定好的。Linux中的软链接和Windows中的快捷方式一样,将软链接文件删除,目标文件不会受影响,因为软连接文件是独立的文件,有自己的inode编号,软链接文件内容是目标文件的路径字符串。

2025-03-11 22:43:35 742

空空如也

空空如也

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

TA关注的人

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