系統調用(system call)是操作系統內核提供的函數,在內核態運行(kernel mode),屬于函數中的低等下人,終身代號9527,雖然低等,但是誰也離不開他們,因為離開他們就沒辦法和內核打交道了,沒辦法和內核打交道就什么都歇菜了。。。 linux3.0.0-14的系統調用有346個,可以在源碼的 linux-3.0/arch/x86/kernel/syscall_table_32.S文件中找到所有的系統調用編號,如果以匯編的方法調用這些系統函數,那么放在EAX寄存器里面的值就是想要調用的函數的號碼,把前20個貼在下面了,很多貌似很熟悉的吧:)ENTRY(sys_call_table)
.long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */ .long sys_exit .long ptregs_fork .long sys_read .long sys_write .long sys_open /* 5 */ .long sys_close .long sys_waitpid .long sys_creat .long sys_link .long sys_unlink /* 10 */ .long ptregs_execve .long sys_chdir .long sys_time .long sys_mknod .long sys_chmod /* 15 */ .long sys_lchown16 .long sys_ni_syscall /* old break syscall holder */ .long sys_stat .long sys_lseek .long sys_getpid /* 20 */ 庫函數是在系統調用上的一層包裝,運行在用戶態(user mode),打個比方吧,庫函數相當于包工頭,系統調用是工人,我們可以自己找工人分任務,但一般是把任務攤給包工頭,包工頭再去給工人分任務。所以雖然最終所有的工作都是系統調用做的,但是我們更通常的做法是調用庫函數,有以下幾個原因: |