shell命令是操作系统提供给普通用户使用的接口,系统调用是操作系统提供给程序员使用的接口。
unix/linux系统编程是指程序员使用系统调用或C语言本身携带的库函数来设计和编写具有某一特定功能的程序。实际上,C语言的库函数也是通过系统调用来实现的,它封装了系统调用,并在此基础上为方便程序员的使用而增加了一些功能。在编写跨平台应用程序时,最好使用C语言的标准库函数以方便移植。linux为上层应用程序的开发提供了丰富的系统调用,应用程序只需包含相应的头文件就可以使用这些函数。实际上,这些系统调用都是以函数库的方式提供的。编译程序时,gcc会自动链接一些常用的库。对于gcc不会自动链接的库,则在编译程序时需要制定所使用的库(编译程序时使用-l<库名>-L<库所在的目录项>选项)。
对于初学者来说,很难记得所有的函数,参数及所在头文件,所以一定要记着使用man命令查看函数原型,这就像java的API文档一样,十分重要。学会看帮助文档,这比去任何论坛提问都有效。因为存在shell命令与系统调用与库函数名重名的现象,所以使用如下方法查看:
man shell命令|系统调用|库函数名
man 1 shell命令(默认)
man 2 系统调用
man 3 库函数名
下面是转来的linux系统调用列表,比较全,且是中文注释
fork |
创建一个新进程 |
clone |
按指定条件创建子进程 |
execve |
运行可执行文件 |
exit |
中止进程 |
_exit |
立即中止当前进程 |
getdtablesize |
进程所能打开的最大文件数 |
getpgid |
获取指定进程组标识号 |
setpgid |
设置指定进程组标志号 |
getpgrp |
获取当前进程组标识号 |
setpgrp |
设置当前进程组标志号 |
getpid |
获取进程标识号 |
getppid |
获取父进程标识号 |
getpriority |
获取调度优先级 |
setpriority |
设置调度优先级 |
modify_ldt |
读写进程的本地描述表 |
nanosleep |
使进程睡眠指定的时间 |
nice |
改变分时进程的优先级 |
pause |
挂起进程,等待信号 |
personality |
设置进程运行域 |
prctl |
对进程进行特定操作 |
ptrace |
进程跟踪 |
sched_get_priority_max |
取得静态优先级的上限 |
sched_get_priority_min |
取得静态优先级的下限 |
sched_getparam |
取得进程的调度参数 |
sched_getscheduler |
取得指定进程的调度策略 |
sched_rr_get_interval |
取得按RR算法调度的实时进程的时间片长度 |
sched_setparam |
设置进程的调度参数 |
sched_setscheduler |
设置指定进程的调度策略和参数 |
sched_yield |
进程主动让出处理器,并将自己等候调度队列队尾 |
vfork |
创建一个子进程,以供执行新程序,常与execve等同时使用 |
wait |
等待子进程终止 |
wait3 |
参见wait |
waitpid |
等待指定子进程终止 |
wait4 |
参见waitpid |
capget |
获取进程权限 |
capset |
设置进程权限 |
getsid |
获取会晤标识号 |
setsid |
设置会晤标识号 |
fcntl |
文件控制 |
open |
打开文件 |
creat |
创建新文件 |
close |