बनाने की खोज के लिए आप पुस्तकालय ऐसे fcntl.h
में पाए जाने वाले के रूप में कॉल मतलब है, वे कर्नेल का हिस्सा नहीं हैं, तो वे glibc
का हिस्सा हैं की जरूरत है।
आप हैं वास्तविक कर्नेल कॉल की चर्चा करते हुए, तो सिस्टम कॉल xyzzy
आमतौर पर समारोह sys_xyzzy
द्वारा नियंत्रित किया जाता।
.data
ENTRY(sys_call_table)
.long SYMBOL_NAME(sys_ni_syscall) /* 0 - old "setup()" system call*/
.long SYMBOL_NAME(sys_exit)
.long SYMBOL_NAME(sys_fork)
.long SYMBOL_NAME(sys_read)
.long SYMBOL_NAME(sys_write)
.long SYMBOL_NAME(sys_open) /* 5 */
.long SYMBOL_NAME(sys_close)
.long SYMBOL_NAME(sys_waitpid)
.long SYMBOL_NAME(sys_creat)
.long SYMBOL_NAME(sys_link)
.long SYMBOL_NAME(sys_unlink) /* 10 */
.long SYMBOL_NAME(sys_execve)
.long SYMBOL_NAME(sys_chdir)
.long SYMBOL_NAME(sys_time)
.long SYMBOL_NAME(sys_mknod)
.long SYMBOL_NAME(sys_chmod) /* 15 */
:
.long SYMBOL_NAME(sys_ni_syscall) /* sys_remap_file_pages */
.long SYMBOL_NAME(sys_ni_syscall) /* sys_set_tid_address */
KernelGrok प्रणाली दिखा एक उपयोगी पृष्ठ है लगता है:
entry.S फ़ाइल, कम से कम 2.4 (मैं बाद में कर्नेल को देखा नहीं किया है), एक मेज मानचित्रण प्रणाली कार्यों के लिए कॉल नंबर का आयोजन किया कॉल, उनके नाम, पैरामीटर, और स्रोत कहां खोजें। उदाहरण के लिए (थोड़ा सुधारित):
0 sys_restart_syscall
eax = 0x00
kernel/signal.c:2058
1 sys_exit
eax = 0x01
ebx = int error_code
kernel/exit.c:1046
2 sys_fork
eax = 0x02
ebx = struct pt_regs *
arch/alpha/kernel/entry.S:716
3 sys_read
eax = 0x03
ebx = unsigned int fd
ecx = char __user *buf
edx = size_t count
fs/read_write.c:391
4 sys_write
eax = 0x04
ebx = unsigned int fd
ecx = const char __user *buf
edx = size_t count
fs/read_write.c:408
:
और इसी तरह। लेकिन, पुराने स्कूल होने के नाते, मैं कर्नेल स्रोतों को स्थानीय रखना पसंद करता हूं और बस grep
का उपयोग करना पसंद करता हूं :-)