Skip to content

Commit c7f0698

Browse files
committed
update ch6:sec1 for sys_open
1 parent d1f924d commit c7f0698

File tree

1 file changed

+6
-9
lines changed

1 file changed

+6
-9
lines changed

source/chapter6/1fs-interface.rst

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,9 @@ Blocks 给出 ``os`` 目录也占用 8 个块进行存储。实际上目录也
141141
/// 功能:打开一个常规文件,并返回可以访问它的文件描述符。
142142
/// 参数:path 描述要打开的文件的文件名(简单起见,文件系统不需要支持目录,所有的文件都放在根目录 / 下),
143143
/// flags 描述打开文件的标志,具体含义下面给出。
144-
/// dirfd 和 mode 仅用于保证兼容性,忽略
145144
/// 返回值:如果出现了错误则返回 -1,否则返回打开常规文件的文件描述符。可能的错误原因是:文件不存在。
146145
/// syscall ID:56
147-
fn sys_openat(dirfd: usize, path: &str, flags: u32, mode: u32) -> isize
146+
fn sys_open(path: &str, flags: u32) -> isize
148147
149148
目前我们的内核支持以下几种标志(多种不同标志可能共存):
150149

@@ -173,21 +172,19 @@ Blocks 给出 ``os`` 目录也占用 8 个块进行存储。实际上目录也
173172
}
174173
175174
pub fn open(path: &str, flags: OpenFlags) -> isize {
176-
sys_openat(AT_FDCWD as usize, path, flags.bits, OpenFlags::RDWR.bits)
175+
sys_open(path, flags.bits)
177176
}
178177
179178
借助 ``bitflags!`` 宏我们将一个 ``u32`` 的 flags 包装为一个 ``OpenFlags`` 结构体更易使用,它的 ``bits`` 字段可以将自身转回 ``u32`` ,它也会被传给 ``sys_open``。
180179

181180
.. code-block:: rust
182181
183-
// user/src/syscall.rs
182+
// user/src/syscall.rs
184183
185-
const SYSCALL_OPENAT: usize = 56;
184+
const SYSCALL_OPEN: usize = 56;
186185
187-
pub fn sys_openat(dirfd: usize, path: &str, flags: u32, mode: u32) -> isize {
188-
syscall6(
189-
SYSCALL_OPENAT, [dirfd, path.as_ptr() as usize, flags as usize, mode as usize, 0, 0]
190-
)
186+
pub fn sys_open(path: &str, flags: u32) -> isize {
187+
syscall(SYSCALL_OPEN, [path.as_ptr() as usize, flags as usize, 0])
191188
}
192189
193190

0 commit comments

Comments
 (0)