以下是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