是否可以从特定的行或字节开始读取文件。目前,我使用此代码读取文件的4个字节:
section .data
filename db "file.txt", 0
section .bss
read_data resb 4
section .text
global _start
_start:
mov rax, SYS_OPEN
mov rdi, filename
mov rsi, O_RDONLY
mov rdx, 0
syscall
push rax
mov rdi, rax
mov rax, SYS_READ
mov rsi, read_data
mov rdx, 4
syscall
mov rax, SYS_CLOSE
pop rdi
syscall
此代码始终读取前4个字节,但是我想从文件的其他部分开始读取,例如中间部分。我需要添加或更改什么?
在执行读取之前,您应该执行一次lseek,以便更新文件位置。
有些事情就这样:
一个新打开的文件描述符从位置= 0开始。如果继续循环读取相同的How to remove "noise" from GCC/clang assembly output?,则将获得连续的块。 (不过,使用[c0]返回的值作为上限,使用更大的缓冲区(如8kiB并在用户空间中循环dword)!系统调用在CPU时间上非常昂贵。)