- 博客(84)
- 收藏
- 关注
原创 进程间通信(system V共享内存)linux
共享内存是通过在内存中开辟区域并映射到进程共享区实现进程间通信的机制。文章详细介绍了共享内存相关函数:shmget创建共享内存、shmat将内存映射到进程、shmdt断开映射、shmctl控制共享内存等操作。实现了一个共享内存通信类,包含创建/获取内存、读写数据、属性设置等功能。通过client/server示例演示了具体应用,client写入A-Z字符,server读取并输出。。这种机制无需数据拷贝,是最高效的IPC方式。
2025-06-19 15:42:52
726
原创 进程间通信2(命名管道)linux
命名管道(FIFO)解决了匿名管道只能用于亲缘进程间通信的限制,通过文件系统路径实现不同进程间通信。文章介绍了命名管道的创建方式(命令行mkfifo和系统调用mkfifo()),并比较了与匿名管道的异同。重点展示了一个C++实现的命名管道通信示例,包含server和client端的代码框架:server端创建管道并读取数据,client端打开管道并写入数据。实现中涉及文件描述符管理、读写权限设置、阻塞式读写操作以及资源清理等关键操作,最终实现了跨进程的可靠通信。
2025-06-19 13:42:34
400
原创 进程间通信1(匿名管道)Linux
进程间通信(IPC)允许相互独立的进程进行数据传输、资源共享和事件通知。本文重点讨论了管道通信机制:管道分类:匿名管道:通过pipe()系统调用创建,仅适用于有亲缘关系的进程命名管道:通过文件系统实现,可用于无亲缘关系进程匿名管道实现原理:父进程创建管道后fork子进程,共享文件描述符父进程关闭读端,子进程关闭写端,实现单向通信内核提供同步与互斥机制,保证数据完整性进程池应用:父进程创建多个子进程并通过管道控制任务分配子进程根据接收的任务码执行对应操作需要妥善处理
2025-06-17 13:34:09
1000
原创 文件系统2(Linux下)
Linux文件系统中,inode不能跨分区,分区需挂载到目录才能使用。通过路径前缀可定位文件所在分区。硬链接(ln命令)是多个文件名映射同一inode,通过引用计数管理删除;目录因存在.和..默认引用计数为2,且禁止硬链接以避免环路。软链接(ln -s)则是独立文件,存储目标文件路径,用于快捷方式。软硬链接区别在于:硬链接共享inode,软链接为独立文件。
2025-06-16 16:57:16
493
原创 文件系统1(Linux中)
硬盘存储通过LBA地址访问扇区,以"块"(通常8个扇区/4KB)为最小单位。文件系统采用分区管理,每个分区包含多个块组,每个块组由超级块、块描述符表、数据区、位图等组成。inode结构体存储文件元信息(128字节),通过inode号唯一标识文件。文件创建时分配inode和数据块,删除时仅修改位图标记。目录文件存储文件名与inode的映射关系,路径解析从根目录开始。Linux内核维护dentry树形结构缓存路径信息,提高文件访问效率。误删文件可通过恢复位图标记找回,但新文件写入可能覆盖原有数据。
2025-06-13 19:07:54
1011
原创 CHS和LBA的地址与的磁盘关联
磁盘物理结构主要由磁头、磁道、柱面和扇区组成,通过CHS(柱面-磁头-扇区)寻址确定数据位置,但受限于寻址位数,最大支持约8GB容量。逻辑上磁盘可视为线性空间,采用LBA(逻辑块地址)寻址,通过公式与CHS相互转换。操作系统使用LBA,而磁盘内部完成地址转换,隐藏物理细节。这种机制兼顾物理存储特性和操作系统需求,实现了高效的数据访问。
2025-06-13 12:58:21
846
原创 进程控制(Linux解析)
本文详细介绍了Linux系统中进程的创建、终止、等待和程序替换的相关概念和操作。首先,通过fork函数创建子进程,父子进程共享代码段,数据段通过写时拷贝技术实现独立。fork函数返回子进程的PID给父进程,返回0给子进程。进程终止时,系统会释放其占用的资源,进程可以通过exit、_exit或return正常退出,或通过信号异常终止。父进程通过wait或waitpid函数等待子进程结束,以回收资源并获取子进程的退出状态。最后,进程可以通过exec系列函数替换当前进程的代码和数据,执行新的程序。
2025-05-18 20:06:02
1063
原创 用哈希表封装unordered_map,unordered_set(部分功能实现)
哈希表,以及哈希表封装unordered_map,unordered_set的部分接口实现
2025-03-26 20:33:55
765
原创 stack,queue容器适配器实现,priority_queue优先级队列的使用和实现
stack,queue容器适配器实现,priority_queue优先级队列的使用和实现
2025-02-15 10:04:31
861
原创 力扣——1.字符串相加;2.字符串相乘(C++)
给定两个字符串形式的非负整数num1和num2,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如BigInteger), 也不能直接将输入的字符串转换为整数形式。
2024-12-07 23:21:57
648
原创 力扣——1.返回字符串中第一个唯一的字符;2.把字符串转换成整数(C++)
这里提供两种思路:第一种是利用哈希表,先遍历一遍字符串存到数组中++(a"下标为0,后面字母一次加1),遍历完后,对字符串进行遍历,再那去与数组该位置比较,是否为1,为返回该位置。根据题目要求要排除字符串前面的空格,其次就是判断第一个符号位是否为负,所以这里定义一个下标,遇到就++,然后从这个位置,开始读,如果不是0~9字符就直接跳出循环,(注意:第二遍遍历时,不能遍历数组,要不然可能出现,第一次唯一出现的字符为'z'但后面又出现'a'也是唯一出现,但不是第一个,但这时候就会返回a的位置)。
2024-12-07 11:38:25
630
原创 牛客——打印日期,日期累加(C++)
接下来就是将天数直接和日期的天数相加(如上图:3+100=103),再去判断这个天数是否大于该月天数,是的话,就减去该月天数,再月份++,直到这个天数小于该月天数,就输出,题目还要求多组输入,所以还要在最外层加一个while循环。这里总体思路和上题一样,用天数直接和该月相比,大于就减去该月天数,再月份++,直到小于该月天数,也可以直接利用从一月到该月一共的天数的数组,分为闰年和平年,再去依次判断,再用天数减去这个一月到该月一共的天数,就可以得到日期。给出年分m和一年中的第n天,算出第n天是几月几号。
2024-12-06 11:56:35
497
1
原创 牛客——求1+2+3+......+n(不能使用乘除法,for、while、if、else、switch、case等关键字及条件判断语句(A?B:C))——(C++)
这里不能使用循环判断,以及乘除,我们可以考虑如何来实现累加,这里的思路是利用类中默认构造函数,来实现,没实例化一个对象,就会走一次构造,实例化n个就可以,要返回累加的结果,这里还需要定义静态的成员变量,然后再默认构造函数中实现累加,所以就还需要定义一个类sum,这里可以把把静态的成员变量设为公有,方便返回值(或者写一个函数来获取这个值也可以),求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?数据范围: 0
2024-12-05 14:54:32
592
原创 牛客——日期到天数的转换,日期的差值(C++)
根据输入的日期,计算是这一年的第几天。保证年份为4位数且日期合法。时间复杂度:O(n) ,空间复杂度: O(1)。
2024-12-05 11:49:44
455
原创 string类中常用函数的模拟实现
目录1. 成员变量2.构造函数,析构函数,默认拷贝构造函数,赋值运算符重载2.1默认构造函数 2.2默认拷贝构造函数2.3赋值运算符重载2.4析构函数3. capacity3.1 size_t size()const(字符个数)3.2 size_t capacity()const(空间大小)3.3 bool empty()const(判断是否为空)3.4 void reserve(size_t n)(改变开辟空间大小)3.5 void resize(size_t n, char c)(改变元素个数)4.
2024-11-29 21:06:45
839
原创 string类部分(C++)
a)在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,后来这个不重要了。这里发现当n>capacity时,在vs2022编译器下,会开辟空间,遵循上面的开辟规则,当所需开辟的空间不足上面的那一个档位时,(例如:我要开辟20个,但根据上面的规则,会直接开辟31个,如果要开辟32,这个31不够,就会直接开辟47个)也会直接开辟那个档位所需的空间。这里可以观察到,当n>capacity时,就会开辟新的空间,然后和第二种情况一样,将不到n的部分,补为'\0',之前的部分不变。
2024-11-27 00:10:19
1200
1
原创 模板初阶,STL简介(C++)
class 类模板名// 类内成员定义// 类模版public:_size = 0;++_size;模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误。(且听小编后面文章讲述)STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
2024-11-24 11:29:59
914
原创 C/C++内存管理
A()_j++;int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;new/delete 和 malloc/free最大区别是 new/delete对于。
2024-11-22 18:26:13
799
原创 迷宫问题,迷宫最优路径——(C语言)
定义一个二维数组 N*M ,如 5 × 5 数组下所示:它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从的路线。入口点为[0,0],既第一格是可以走的路。数据范围: 2≤n,m≤10 2≤n,m≤10 , 输入的内容只包含 0≤val≤1。
2024-11-21 22:48:18
2703
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅