- 博客(15)
- 收藏
- 关注
原创 进程间共享mutex
属性对象仅用于初始化互斥锁,其生命周期在完成后就结束了。可以在初始化互斥锁之后立即销毁属性对象,而不影响互斥锁的使用。共享内存用于存储互斥锁实例,以便在多个进程之间共享该互斥锁。一旦互斥锁被初始化完毕,就可以立即销毁用于初始化的互斥锁属性。这些属性仅在初始化过程中使用,初始化完成后,它们不会再被使用。因此,可以安全地销毁它们。
2024-07-31 10:31:02
207
原创 git internal 三个主要对象
这个时候就算你在工作目录删除了test.txt文件,没关系,你可以从object database中恢复某个版本的内容到文件中。在这里我们不在工作目录创建文件,而是直接手动创建一个BLOB object,并且手动的将它存储到git database。drwxr-xr-x 7 root root 4096 7月 11 00:38 .git/创建一个空目录,不是空的也行,但这个目录之前没有被git管理过,即没有.git目录。当然你能在终端上看到文件内容,也就可以利用管道把内容输出到文件中,进行保存。
2024-07-11 11:19:34
640
原创 git internals 1--.git目录介绍
这些规则适用于你不希望包含在共享的 .gitignore 文件中的情况,例如本地生成的临时文件或目录。:有些忽略规则你可能不希望包含在仓库的 .gitignore 文件中,因为 .gitignore 文件通常是和仓库一起共享的,而 info/exclude 文件则是本地的,不会被推送到远程仓库。假设你有一个 Git 仓库,并且你不希望将一些特定的本地文件包含在版本控制中,但这些文件规则又不适合放在共享的 .gitignore 文件中。文件:这是一个本地的忽略文件,它不会被推送到远程仓库,只影响当前仓库。
2024-07-05 12:00:19
321
原创 C语言从命令行提取程序名
在一些项目中,我们需要在项目的bin目录中生成可执行文件,除了参数处理外,有个很重要的过程就是获取程序名,如下是比较严谨的获取程序名的方式,来源于PostgreSQL。关于静态编译检查:
2024-07-04 10:58:23
1480
翻译 linux内存管理-2-初期memblock分配器
内核在启动时通过E820机制获得到可⽤的内存地址范围后,还需要将这些内存都管理起来,以应对后⾯系统运⾏时 的各种功能的内存申请。内存分配器包括两种。刚启动时采⽤是初期分配器。这种内存分配器仅仅只为了满⾜系统 启动时间内对内存⻚的简单管理,管理粒度较粗。另外⼀种是在系统起来后正常运⾏时采⽤的复杂⼀些但能⾼效管 理4KB粒度⻚⾯的伙伴系统,是运⾏时的主要物理⻚内存分配器。在初期分配器中,在Linux 的早期版本采⽤的是 bootmem。但在 2010 年之后,就慢慢替换成了 memblock 内存 分配器。
2024-07-02 20:43:20
95
翻译 Linux内存管理-1-物理内存初始化
但其实操作系统在刚刚启动的时候,对内存的可⽤地址范围、NUMA分组信息都是⼀⽆所知。在计算机的体系结构 中,除了操作系统和硬件外,中间还存在着⼀层固件( firmware)。固件是位于主板上的使⽤ SPI Nor Flash 存储着的软件。起着在硬件和操作系统中间承上启下的作⽤。它对外提供 接⼝规范是⾼级配置和电源接⼝( ACPI,Advanced Configuration and Power Interface)。其第⼀个版本ACPI1.0是1997年的时候由英特尔、微软和东芝公司共同推出的。
2024-07-02 13:43:33
808
转载 linux文件描述符
linux文件描述符内容做个笔记。Linux 从诞生以来,一直用 struct task_struct 来表示进程/线程,用 struct file 表示打开的文件,用 struct inode 表示文件本身。struct file 和 struct inode 的区别在于,如果两次 open 同一个文件(比方说 web server 写 access log,你用 less 看这个 assess log 文件),会有两个 struct file 对象,指向同一个 struct inode 对象。
2024-06-26 23:04:03
44
原创 Makefile $%的使用
在Makefile中,$%是一个特殊的自动化变量,主要用于处理归档成员 (archive member) 的情况,即库文件中的成员文件。它在非常具体的情况下使用,通常在处理静态库(例如.a文件)时。
2024-06-17 13:52:17
235
原创 Makefile依赖问题-4自动依赖
我们用简单、粗暴、无脑的方式解决头文件依赖的问题,但是这种解决方式有几个缺点;1、比较容易想到的是,正儿八经的项目头文件都是比较多的,很容易出错。2、对照缺点,好的解决方案应该是能自动就不要手动:1、通过命令自动生成源文件.c对头文件的依赖。(什么命令?2、命令生成的依赖结果能够放到Makefile中。(怎么放?3、当头文件改动后,自动确认需要重新编译的文件。(怎么自动确认?
2024-06-10 23:47:12
1816
原创 Makefile依赖问题-3
上述Makefile没有添加对.h的依赖,嗯。这个看$^,Makefile中的自动变量,表示依赖文件的集合。我上早八,更新了func.h,目标没更新啊,可是刚刚已经亲眼所见,依赖文件是累加的!出现问题:规则中依赖的文件更新了(prerequisites),但是目标没有更新,因此更新其中任何的依赖文件(prerequisites),都会更新目标。总结:目标是具体文件还是带有%要仔细了,最保险就是依赖文件写一行。本篇是关于依赖问题的第3集,还是写到哪儿算哪儿。这里的规则是被覆盖了!后边的规则覆盖了前边的。
2024-06-09 15:05:17
323
原创 Makefile 依赖问题-2
因此不是说你在vpath指定了头文件的路径,gcc就会去那个路径下找,不可能的,gcc属于recipe部分,是命令,但是make命令会因为依赖关系去相应的目录下找target: prerequisites对应的文件的。我们说编写Makefile的时候注意目标(target,目标在文件系统中是否会生成文件以及生成文件所在的位置)、依赖文件(prerequisites,确定依赖文件是否完整,以及确定这些个文件是否真的能决定目标的更新),以及这两者之间的关系。这里用的demo 1那个Makefile。
2024-06-09 02:16:38
456
原创 Makefile依赖问题-1
参考:https://juejin.cn/post/6844903687471497223https://www.cnblogs.com/cuckoos/articles/5049984.html这块知识有点太烦人了,顶不住,整理一下,省的到处翻了。。。预处理器将头文件中的代码直接插入源文件编译器只通过预处理后的源文件产生目标文件因此,规则中以源文件为依赖,命令可能无法执行。这里的没法执行主要是个人在写规则时,目标所依赖的文件没写全。因为目标是否更新主要看依赖和目标文件谁比较新。(在 Makefile
2024-06-06 18:01:47
623
原创 DB2表压缩
启用压缩功能,但不影响现有数据。:重新组织表,对现有数据进行压缩,并优化表结构。通过这两个步骤,可以确保表中所有数据(现有和新插入的)都被压缩,优化磁盘空间使用和查询性能。
2024-05-22 10:36:33
531
原创 git commit中author和commitor的区别
让我们用一个具体的例子来展示 Git 中的作者(author)和提交者(committer)之间的区别,并通过实际的 Git 命令来演示。假设 Alice 写了一些代码并创建了一个补丁文件,然后 Bob 使用这个补丁文件在他的 Git 仓库中创建了一个提交。在这个场景中,Alice 是作者,而 Bob 是提交者。
2024-05-20 17:53:39
742
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人