2011-04-24 64 views
4

我这样做没有任何参数,只是一个基本的helloWorld的系统调用示例:参数传递到系统调用

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

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

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

它在哪里需要很长时间并返回一个很长的,但它没有正确编译;什么是正确的语法?

回答

4

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

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

int main(int argc, char* argv[]) { 
    char* ptr = "boo\n"; 
    syscall(__NR_write, 1, ptr, 4); /* write syscall */ 
    return 0; 
} 
+0

1指的是#参数,但是4指的是什么? – Jeff 2011-04-24 16:53:12

+2

不,'1' **是**参数 - 在这种情况下''stdout'文件描述符的编号,'4'是缓冲区的长度,如'write(FILENO_STDOUT,boo,4);' – 2011-04-24 16:58:13

+0

明白了, 谢谢! – Jeff 2011-04-24 17:16:36

1

原型为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)