系统调用(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),打个比方吧,库函数相当于包工头,系统调用是工人,我们可以自己找工人分任务,但一般是把任务摊给包工头,包工头再去给工人分任务。所以虽然最终所有的工作都是系统调用做的,但是我们更通常的做法是调用库函数,有以下几个原因: |