将参数传递给系统调用

时间:2011-04-24 16:23:05

标签: c linux kernel parameter-passing system-calls

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

int main()
{
   syscall(__NR_helloWorld);
   return 0;
}

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

int main()
{
   long input = 1;
   long result = syscall(__NR_someSysCall, long input, long);
   return 0;
}

long所需的位置并返回long,但未正确编译;什么是正确的语法?

2 个答案:

答案 0 :(得分:4)

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

#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;
}

答案 1 :(得分:2)

syscall的原型是

   #define _GNU_SOURCE        /* or _BSD_SOURCE or _SVID_SOURCE */
   #include <unistd.h>
   #include <sys/syscall.h>   /* For SYS_xxx definitions */

   int syscall(int number, ...);

这表示它需要一个可变数量(和类型)的参数。这取决于特定的系统调用。 syscall不是特定系统调用的常规接口。这些可以明确编码,例如write(fd, buf, len)