2011-09-23 42 views
3

我知道syscall 1意味着write是否有一個命令列出在bash上的所有系統調用名稱和數字?

但有一個命令可以列出在bash Linux上所有執行系統調用的名稱和號碼?

+5

你在寫什麼不重要的野獸? –

+0

請注意,系統調用號碼因平臺而異。例如,對於x86_64,'write'是syscall 1;但對於32位x86,系統調用1是'exit'('write'是4)。 –

回答

5

man頁面指向頭文件sys/syscall.h。它具有所有定義的常量,位於/usr/include/sys/syscall.h。 (這是我使用的OS X上的位置,但我認爲它對大多數Linux發行版也是如此)。

+0

我沒有'man'安裝 – lexer

+7

@lexer:如果你打算做任何類型的編程,那麼你真的需要安裝'man'才能進一步深入 –

+0

http://linux.die.net/man/2/syscalls –

0

這是我剛寫的一個oneliner。它至少在Linux上工作,因爲它使用/usr/bin/cpp和系統包含文件,所以需要在機器上使用C編譯器。

{ echo -e '#include <sys/syscall.h>\n#define X(c) #c c'; sed -n 's/#define \(SYS_[^ ]*\).*/X(\1)/p' $(echo -e '#include <sys/syscall.h>' | cpp | sed -n 's/# [0-9]* "\([^<"]*\)".*/\1/p') | sort -u; } | cpp -P | grep ' [0-9]*$' 
相關問題