
系统编程
文章平均质量分 76
瑜陀
Sophomore, major in Computer Science.
展开
-
debugger(一):打断点的实现以及案例分析
编译后,我们要打断点进行测试,可以看到目前只能传入一个地址,这个地址还是 0x 开头的 16 进制地址,我们对于这个地址丝毫没有头绪,因为我们不知道 std::cerr原创 2024-05-25 23:32:01 · 945 阅读 · 0 评论 -
关于一篇知乎答案的重现
实现了一个简单的容器化环境的初始化过程,包括命名空间的隔离、文件系统的挂载与切换、进程环境的修改等操作,从而创建了一个隔离的运行环境。原创 2024-03-31 17:20:23 · 285 阅读 · 0 评论 -
实现个人日志命令行工具(C语言)
成功创建了一个能够将命令行输入的日志同步到 GitHub 的工具,并且能够在终端直接使用。这个小工具提供了便捷的日志记录和同步功能,是一个不错的编程趣味项目!原创 2023-12-19 16:43:26 · 197 阅读 · 0 评论 -
MIT 6.S081学习笔记(第二章)
库函数会将系统调用号码和参数加载到寄存器中,通常使用a7寄存器(或者其他体系结构中的类似寄存器),其中a7用于存储系统调用号码原创 2023-10-05 00:15:19 · 661 阅读 · 0 评论 -
MIT 6.S081学习笔记(第一章)
xv6是以ANSI C重新编写的Unix第六版现代实现版本,适用于多处理器x86或RISC-V系统。xv6于2006年问世,作为麻省理工学院的操作系统工程(6.828)课程的教学使用。与Linux或BSD不同,xv6非常简单,足以在一个学期内讲完,但仍然包含Unix的重要概念和组织。原创 2023-09-10 19:30:08 · 628 阅读 · 0 评论 -
MIT 6.S081学习笔记(第〇章)
......有一个例外,那就是 cd,它是在 shell 中实现的。cd 必须改变 shell 自身的当前工作目录。如果 cd 作为一个普通命令执行,那么 shell 就会 fork 一个子进程,而子进程会运行 cd,cd 只会改变子进程的当前工作目录。父进程的工作目录保持原样,这意味着这个命令没有起到预期的作用......原创 2023-09-07 23:04:29 · 624 阅读 · 0 评论 -
exec()函数家族详细
该函数带` p`,第一个参数是一个 `*file`,说明不需要带完整路径,它会在默认环境变量里面自动查找。原创 2023-03-11 22:35:28 · 1029 阅读 · 3 评论 -
对fork() 函数的理解
如果程序只是简单的新建一个几乎一摸一样的进程,那么这样的进程是没什么作用的。因此,如果能把新的子进程用其它程序替换掉,我们就成功地利用一个进程,创建了一个完全不同的子进程。原创 2023-03-11 21:23:10 · 227 阅读 · 0 评论 -
简单的 ls命令的实现(四.完结)
这里最关键的就是对`-R`参数的处理,因为我们的整体框架并不适合做函数的递归,因此我们可以在判断某个` filename`是一个 `dir` 之后,就可以把它加入到 `dirname` 中,并且把 `dirlen++`,这样就在逻辑上实现了遍历,这里也充分利用了全局变量的优势原创 2023-03-08 22:08:59 · 467 阅读 · 0 评论 -
简单的 ls 命令的实现(三)
ls 命令后面可以跟进一些参数,比如一个命令可以是这样的:`ls -a -l -rit User . .. `,这时候,就一定要对输入的参数进行一定的处理。观察容易想到,可选的命令参数,不管是`-a -l -i`,还是`-rit`,这些参数前面都有一个`“-”`符号。而文件夹的名字或者文件的名字,前面都没有这些,这就简单很多了。原创 2023-02-17 18:22:21 · 338 阅读 · 0 评论 -
简单的 ls 命令的实现(二)
既然是位图,那么必然可以通过掩码来取得其信息。如关于文件类型,在``中定义了`掩码S_IFMT`来取得文件类型信息,用法如下:原创 2023-02-17 17:08:47 · 430 阅读 · 3 评论 -
简单的 ls 命令的实现(一)
`dirent.h `是 C 标准库中的一个头文件,用于访问目录中的文件和子目录。它包含了一些数据类型和函数原型,用于实现对目录的打开、读取和关闭等操作,例如 `opendir()`、`readdir()`、`closedir() `等函数。在 Unix 和 Linux 系统中,`dirent.h` 是一个常用的头文件。原创 2023-02-15 12:35:16 · 569 阅读 · 0 评论