以下是Linux系統調用的一個列表,包含了大部分常用系統調用和由系統調用派生出的的函數。這可能是你在互聯網上所能看到的唯一一篇中文注釋的Linux系統調用列表,即使是簡單的字母序英文列表,能做到這么完全也是很罕見的。
按照慣例,這個列表以man pages第2節,即系統調用節為藍本。按照筆者的理解,對其作了大致的分類,同時也作了一些小小的修改,刪去了幾個僅供內核使用,不允許用戶調用的系統調用,對個別本人稍覺不妥的地方作了一些小的修改,並對所有列出的系統調用附上簡要注釋。
其中有一些函數的作用完全相同,只是參數不同。(可能很多熟悉C++朋友馬上就能聯想起函數重載,但是別忘了Linux核心是用C語言寫的,所以只能取成不同的函數名)。還有一些函數已經過時,被新的更好的函數所代替了(gcc在鏈接這些函數時會發出警告),但因為兼容的原因還保留着,這些函數我會在前面標上“*”號以示區別。
一、進程控制:
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 |
設置會晤標識號 |
二、文件系統控制
1、文件讀寫操作
fcntl |
文件控制 |
open |
打開文件 |
creat |
創建新文件 |
close |
關閉文件描述字 |
read |
讀文件 |
write |
寫文件 |
readv |
從文件讀入數據到緩沖數組中 |
writev |
將緩沖數組里的數據寫入文件 |
pread |
對文件隨機讀 |
pwrite |
對文件隨機寫 |
lseek |
移動文件指針 |
_llseek |
在64位地址空間里移動文件指針 |
dup |
復制已打開的文件描述字 |
dup2 |
按指定條件復制文件描述字 |
flock |
文件加/解鎖 |
poll |
I/O多路轉換 |
truncate |
截斷文件 |
ftruncate |
參見truncate |
umask |
設置文件權限掩碼 |
fsync |
把文件在內存中的部分寫回磁盤 |
2、文件系統操作
access |
確定文件的可存取性 |
chdir |
改變當前工作目錄 |
fchdir |
參見chdir |
chmod |
改變文件方式 |
fchmod |
參見chmod |
chown |
改變文件的屬主或用戶組 |
fchown |
參見chown |
lchown |
參見chown |
chroot |
改變根目錄 |
stat |
取文件狀態信息 |
lstat |
參見stat |
fstat |
參見stat |
statfs |
取文件系統信息 |
fstatfs |
參見statfs |
readdir |
讀取目錄項 |
getdents |
讀取目錄項 |
mkdir |
創建目錄 |
mknod |
創建索引節點 |
rmdir |
刪除目錄 |
rename |
文件改名 |
link |
創建鏈接 |
symlink |
創建符號鏈接 |
unlink |
刪除鏈接 |
readlink |
讀符號鏈接的值 |
mount |
安裝文件系統 |
umount |
卸下文件系統 |
ustat |
取文件系統信息 |
utime |
改變文件的訪問修改時間 |
utimes |
參見utime |
quotactl |
控制磁盤配額 |
三、系統控制
ioctl |
I/O總控制函數 |
_sysctl |
讀/寫系統參數 |
acct |
啟用或禁止進程記賬 |
getrlimit |
獲取系統資源上限 |
setrlimit |
設置系統資源上限 |
getrusage |
獲取系統資源使用情況 |
uselib |
選擇要使用的二進制函數庫 |
ioperm |
設置端口I/O權限 |
iopl |
改變進程I/O權限級別 |
outb |
低級端口操作 |
reboot |
重新啟動 |
swapon |
打開交換文件和設備 |
swapoff |
關閉交換文件和設備 |
bdflush |
控制bdflush守護進程 |
sysfs |
取核心支持的文件系統類型 |
sysinfo |
取得系統信息 |
adjtimex |
調整系統時鍾 |
alarm |
設置進程的鬧鍾 |
getitimer |
獲取計時器值 |
setitimer |
設置計時器值 |
gettimeofday |
取時間和時區 |
settimeofday |
設置時間和時區 |
stime |
設置系統日期和時間 |
time |
取得系統時間 |
times |
取進程運行時間 |
uname |
獲取當前UNIX系統的名稱、版本和主機等信息 |
vhangup |
掛起當前終端 |
nfsservctl |
對NFS守護進程進行控制 |
vm86 |
進入模擬8086模式 |
create_module |
創建可裝載的模塊項 |
delete_module |
刪除可裝載的模塊項 |
init_module |
初始化模塊 |
query_module |
查詢模塊信息 |
*get_kernel_syms |
取得核心符號,已被query_module代替 |
四、內存管理
brk |
改變數據段空間的分配 |
sbrk |
參見brk |
mlock |
內存頁面加鎖 |
munlock |
內存頁面解鎖 |
mlockall |
調用進程所有內存頁面加鎖 |
munlockall |
調用進程所有內存頁面解鎖 |
mmap |
映射虛擬內存頁 |
munmap |
去除內存頁映射 |
mremap |
重新映射虛擬內存地址 |
msync |
將映射內存中的數據寫回磁盤 |
mprotect |
設置內存映像保護 |
getpagesize |
獲取頁面大小 |
sync |
將內存緩沖區數據寫回硬盤 |
cacheflush |
將指定緩沖區中的內容寫回磁盤 |
五、網絡管理
getdomainname |
取域名 |
setdomainname |
設置域名 |
gethostid |
獲取主機標識號 |
sethostid |
設置主機標識號 |
gethostname |
獲取本主機名稱 |
sethostname |
設置主機名稱 |
六、socket控制
socketcall |
socket系統調用 |
socket |
建立socket |
bind |
綁定socket到端口 |
connect |
連接遠程主機 |
accept |
響應socket連接請求 |
send |
通過socket發送信息 |
sendto |
發送UDP信息 |
sendmsg |
參見send |
recv |
通過socket接收信息 |
recvfrom |
接收UDP信息 |
recvmsg |
參見recv |
listen |
監聽socket端口 |
select |
對多路同步I/O進行輪詢 |
shutdown |
關閉socket上的連接 |
getsockname |
取得本地socket名字 |
getpeername |
獲取通信對方的socket名字 |
getsockopt |
取端口設置 |
setsockopt |
設置端口參數 |
sendfile |
在文件或端口間傳輸數據 |
socketpair |
創建一對已聯接的無名socket |
七、用戶管理
getuid |
獲取用戶標識號 |
setuid |
設置用戶標志號 |
getgid |
獲取組標識號 |
setgid |
設置組標志號 |
getegid |
獲取有效組標識號 |
setegid |
設置有效組標識號 |
geteuid |
獲取有效用戶標識號 |
seteuid |
設置有效用戶標識號 |
setregid |
分別設置真實和有效的的組標識號 |
setreuid |
分別設置真實和有效的用戶標識號 |
getresgid |
分別獲取真實的,有效的和保存過的組標識號 |
setresgid |
分別設置真實的,有效的和保存過的組標識號 |
getresuid |
分別獲取真實的,有效的和保存過的用戶標識號 |
setresuid |
分別設置真實的,有效的和保存過的用戶標識號 |
setfsgid |
設置文件系統檢查時使用的組標識號 |
setfsuid |
設置文件系統檢查時使用的用戶標識號 |
getgroups |
獲取后補組標志清單 |
setgroups |
設置后補組標志清單 |
八、進程間通信
1、信號
sigaction |
設置對指定信號的處理方法 |
sigprocmask |
根據參數對信號集中的信號執行阻塞/解除阻塞等操作 |
sigpending |
為指定的被阻塞信號設置隊列 |
sigsuspend |
掛起進程等待特定信號 |
signal |
參見signal |
kill |
向進程或進程組發信號 |
*sigblock |
向被阻塞信號掩碼中添加信號,已被sigprocmask代替 |
*siggetmask |
取得現有阻塞信號掩碼,已被sigprocmask代替 |
*sigsetmask |
用給定信號掩碼替換現有阻塞信號掩碼,已被sigprocmask代替 |
*sigmask |
將給定的信號轉化為掩碼,已被sigprocmask代替 |
*sigpause |
作用同sigsuspend,已被sigsuspend代替 |
sigvec |
為兼容BSD而設的信號處理函數,作用類似sigaction |
ssetmask |
ANSI C的信號處理函數,作用類似sigaction |
2、消息
msgctl |
消息控制操作 |
msgget |
獲取消息隊列 |
msgsnd |
發消息 |
msgrcv |
取消息 |
3、管道
4、信號量
semctl |
信號量控制 |
semget |
獲取一組信號量 |
semop |
信號量操作 |
5、共享內存
shmctl |
控制共享內存 |
shmget |
獲取共享內存 |
shmat |
連接共享內存 |
shmdt |
拆卸共享內存 |
參考資料
- Linux man pages
- Advanced Programming in the UNIX Environment, W. Richard Stevens, 1993
轉自:http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html