Warm tip: This article is reproduced from serverfault.com, please click

c-syscall(2)的参数及其用途是什么?

(c - What are the arguments of syscall (2) and their purpose?)

发布于 2020-12-07 09:00:23

我碰到了这本Wikibook,其中显示了可以传递给的7个参数syscall,并且我想了解每个参数的目的。

手册页中未指定
另外,我已经找到了可以传递给每个系统调用的参数,但我不一定了解它们之间的共同点。

理想情况下,我正在寻找一个指定答案

arg #1 - pid  
arg #2 - ... 

架构是x86-64。

Questioner
Eliran Turgeman
Viewed
0
Martin B 2020-12-08 05:14:03

你链接到提供了你要查询的参数列表。

我认为你可能会感到困惑的是,syscall它不执行任何一项操作。而是,它是通用API,可用于你可能要求内核执行的任何操作-打开文件,映射内存,派生新进程等。

你希望内核执行的特定操作是使用syscall号选择的。只需从表中选择第一个,系统调用0(称为sys_read)就会从文件中读取。

显然,由不同的系统调用执行的操作需要不同的参数。与该sys_read示例相同,我们在表中看到它带有三个参数:文件描述符(fd),指向缓冲区的指针(buf)和要读取的字节数(count)。因此,如果你要调用此syscall,则可以按以下步骤进行操作:

#include <sys/syscall.h>

// Assuming these have been initialized appropriately.
unsigned int fd = ...;
char * buf = ...;
size_t count = ...;

syscall(SYS_read, fd, buf, count);

该答案提供了有关何时可能要选择使用的更多信息syscall简短的版本是使用的原因syscall很少。

编辑:正如@PeterCordes所指出的,ABI之间的系统调用号有所不同,因此你应该使用中定义的常量,sys/syscall.h而不要自己对系统调用号进行硬编码。