2010-10-24 55 views
0

仍在使用此係統調用!!!爲什麼我在嘗試執行系統調用時遇到這些語法錯誤

我已經添加了系統調用內核,編譯和操作系統運行。

現在我在編譯我的測試應用程序時出現語法錯誤。

testmycall.h

#include<linux/unistd.h> 

#define __NR_mycall 244 

_syscall1(long, mycall, int, i) 

testmycall.c

#include<stdio.h> 

#include "testmycall.h" 

int main(int argc, char *argv[]) 

{ 

    printf("%d\n", mycall(15)); 

} 

這裏是錯誤

[email protected]:~$ gcc -o testmycall testmycall.c 
In file included from testmycall.c:3: 
testmycall.h:7: error: expected ‘)’ before ‘mycall’ 
[email protected]:~$ gcc -o testmycall testmycall.c 
In file included from testmycall.c:3: 
testmycall.h:7: error: expected declaration specifiers or ‘...’ before ‘mycall’ 
testmycall.h:7: error: expected declaration specifiers or ‘...’ before ‘i’ 
testmycall.c: In function ‘_syscall1’: 
testmycall.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
testmycall.h:7: error: parameter name omitted 
testmycall.h:7: error: parameter name omitted 
testmycall.c:11: error: expected ‘{’ at end of input 
[email protected] 

我已經在系統調用,而不是_syscall1

加入現在我得到這個錯誤

[email protected]:~$ gcc -o testmycall testmycall.c 
testmycall.c: In function ‘syscall’: 
testmycall.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
testmycall.c:11: error: expected ‘{’ 

這是應用程序,任何想法爲什麼?

+3

請發表你得到確切的錯誤。 – DarkDust 2010-10-24 15:18:37

+0

錯誤已添加到信息 – molleman 2010-10-24 15:46:18

+0

嘗試查看預處理的代碼 - 可能會告訴您(和我們)更多關於此問題的信息。使用gcc -E輸出,並注意語法錯誤所在的最後部分。 – 2010-10-24 20:27:37

回答

1

_syscall已過時,不應使用,而應使用syscall,例如。

#define _GNU_SOURCE 
#include <unistd.h> 
... 

printf("%d\n", syscall(__NR_mycall, 15)); 

這裏是我的測試程序:

#define _GNU_SOURCE 
#include <stdio.h> 
#include <unistd.h> 

#define __NR_mycall 244 

int main(int argc, char **argv) 
{ 
    printf("%d\n", syscall(__NR_mycall,15)); 
    return 0; 
} 
+0

同樣的錯誤,因爲這 – molleman 2010-10-24 16:28:56

+0

同樣的錯誤@molleman:我已經添加了一個測試程序,爲我編譯 – Hasturkun 2010-10-24 16:30:57

+0

歡呼的人,這個編譯我,它一定是做的與頭文件,不真的明白爲什麼 – molleman 2010-10-24 16:33:20

2

我相信_syscallN()宏從2.6.18左右的內核頭部被刪除。

的從GCC(不是特別有用)的錯誤信息是由於_syscall1並不是在所有的定義 - 如果你寫你得到同樣的錯誤:

any_old_rubbish_here(long, mycall, int, i) 

syscall()功能應該工作。 man syscall瞭解詳情。

+0

添加了一個新的錯誤,從編譯爲syscall() – molleman 2010-10-24 16:26:41

相關問題