我找到了x86-64模式的syscalls列表(带参数): http://filippo.io/linux-syscall-table/ 但是我在哪里可以得到这个系统调用的详细描述?
例如下面,除了0102o(rw,create)之外,哪些标志可以用于'open'syscall,在其他情况下: 只读,只写等。
SECTION .data
message: db 'Hello, world!',0x0a
length: equ $-message
fname db "result"
fd dq 0
SECTION .text
global _start
_start:
mov rax, 2 ; 'open' syscall
mov rdi, fname ; file name
mov rsi, 0102o ; read and write mode, create if not
mov rdx, 0666o ; permissions set
syscall
mov [fd], rax
mov rax, 1 ; 'write' syscall
mov rdi, [fd] ; file descriptor
mov rsi, message ; message address
mov rdx, length ; message string length
syscall
mov rax, 3 ; 'close' syscall
mov rdi, [fd] ; file descriptor
syscall
mov rax, 60
mov rdi, 0
syscall
基于来源(可能) https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/open.c 如何理解它,可以使用哪个(所有开放列表)标志?
答案 0 :(得分:2)
系统调用的文档位于手册页的第2部分和/或源代码的注释中。
手册页以:
开头 #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
参数 flags 必须包含以下访问模式之一: O_RDONLY , O_WRONLY 或 O_RDWR 。这些请求分别以只读,只写或读/写方式打开文件。
此外,在标志中可以按位或按钮设置零个或多个文件创建标志和文件状态标志。文件创建标志为 O_CREAT , O_EXCL , O_NOCTTY 和 O_TRUNC 。
可以在系统头文件中轻松查找这些值。