William A

最新文章

数组越界导致的函数调用

C语言中数组越界是未定义行为,因此以下代码在不同的编译器或者不同版本的同一编译器行为是不可预测的。在gcc某些版本中,以下代码会出现有意思的行为。 // demo.c #include <stdio.h> #include <stdlib.h> void jmp() { printf("Hello jmp\n"); exit(1); } void …

文件中的魔数

跟 Windows 不同,在 Linux 中的文件扩展名仅仅是方便用户肉眼判断类型而已,将扩展名换掉并不会影响使用。 本质上,所有文件的内容都是以二进制保存的。程序之所以能将文件识别成不同的类型,无非就是不同类型的文件内容有区别于其他类型的特征。举个简单的例子,现在有一个系统,文件类型只有两种,那我们就可以将文件的第一个字节用于区分类型,将第一个字节为0000都视为同一类型的文件,第一个字节为 …

文件描述符分配问题

在 OSTEP 上看到一段有意思的代码: // p4.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <fcntl.h> #include <sys/wait.h> int main() { …

文件系统实现

本文是Operating Systems: Three Easy Pieces的阅读笔记 整体组织 首先,将磁盘划分为一个个块,块大小为 4KB,这也是很多文件系统普遍使用的块大小。将上述划分的块编号为 0 至 N-1,则该文件系统的大小为 N 个 4KB。 假设我们的磁盘的大小只能划分为 64 块。文件系统嘛,就是用来存储用户数据的,我们将存储用户数据的区域称为data region。另外,为 …