最近在看 Linux 中双向链表的实现,发现大部分代码都是能看懂的,和上学时学的内容基本一致。
什么头插法,尾插法啊乱七八糟的。
但我注意到有一点似乎不一样,在学校时,我们学的链表包括数据域和指针域,但在 Linux 中双向链表的节点是这样定义的:
struct list_head {
struct list_head *next, *prev;
};
没有数据域
没有数据域的链表该怎么使用呢?
最近在看 Linux 中双向链表的实现,发现大部分代码都是能看懂的,和上学时学的内容基本一致。
什么头插法,尾插法啊乱七八糟的。
但我注意到有一点似乎不一样,在学校时,我们学的链表包括数据域和指针域,但在 Linux 中双向链表的节点是这样定义的:
struct list_head {
struct list_head *next, *prev;
};
没有数据域
没有数据域的链表该怎么使用呢?
借过一下,让一下,也用 Excuse me
n.
sorry?
也有这个意思
Thank you very much 是比较正式的说法。
大多数情况下不必说 Thank you very much, Thank you 足够了。
e.g.Thank you, Sir!
Thank you!
Thank you, man
现在的工作可以说是一行代码也不写,WB 程序员,经历了才会懂。
为了避免手生以及进一步巩固基础知识,决定定期抄一抄代码。
从 Linux 核心工具 开始,学习如何优雅编程。
想当年 jsdelivr 在国内还能用的时候, GitHub 就是免费小网盘。
现在虽然国内访问不那么流畅了,但是用来存一些小的琐碎的日志文件还是不错的。
为了实现自动化,使用 Python 参考 GitHub API 文档 封装了一些常用功能。
CPU Reset 后寄存器会有确定的初始状态
Reset 后处理器从固定地址(Reset Vector)启动
#include <sys/syscall.h>
.globl _start
_start:
movq $SYS_write, %rax // write(
movq $1, %rdi // fd=1,
movq $st, %rsi // buf=st,
movq $(ed - st), %rdx // count=ed-st
syscall // );
movq $SYS_exit, %rax // exit(
movq $1, %rdi // status=1
syscall // );
st:
.ascii "\033[01;31mHello, OS World\033[0m\n"
ed:
问:这段代码是什么意思?