将参数传递给系统调用

Jef*_*eff 6 c linux kernel system-calls parameter-passing

我做了一个没有参数的基本helloWorld系统调用示例,只是:

int main()
{
   syscall(__NR_helloWorld);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

但现在我想弄清楚如何将实际参数传递给系统调用(即a long).准确的格式是什么,我尝试过:

int main()
{
   long input = 1;
   long result = syscall(__NR_someSysCall, long input, long);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

它需要a long并返回a long,但它没有正确编译; 什么是正确的语法?

Nik*_*sov 5

删除类型名称。这只是一个函数调用。例子:

#include <sys/syscall.h>
#include <unistd.h>

int main( int argc, char* argv[] ) {
    char str[] = "boo\n";
    syscall( __NR_write, STDOUT_FILENO, str, sizeof(str) - 1 );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 不,`1` **是**一个参数 - 在这种情况下`stdout`文件描述符编号,`4`是缓冲区的长度,如`write(FILENO_STDOUT,boo,4);` (3认同)