linux使用者api和核心api
1:系統呼叫:
系統呼叫是值作業系統提供給使用者程式呼叫的一組“特殊”程式設計介面,使用者程式可以透過這組“特殊”介面獲得作業系統核心提供的服務。例如,使用者可以透過程式控制相關的系統呼叫來建立程式,實現程式排程,程式管理等!
Linux中,為了更好地保護核心空間,將程式執行空間分為核心空間和使用者空間(也就是常說的核心態和使用者態),它們分別執行在不同的級別上,邏輯上相互隔離的。因此,使用者程式在通常情況下不允許訪問核心資料,他們只能在使用者空間訪問使用者資料,呼叫使用者空間的函式。
但是,在有些情況下,使用者空間的程式需要的程式需要獲得一定的系統服務(呼叫核心空間的程式),這時作業系統就必須呼叫系統為使用者提供的“特殊介面”-系統呼叫規定使用者程式進入核心空間的具體位置。進行系統呼叫時,程式執行空間需要從使用者空間進入核心空間,處理完後在返回核心空間。
系統呼叫按照功能邏輯可以分為:程式控制,程式間通訊,檔案系統控制,系統控制,儲存管理,網路管理,socket控制,使用者管理等。
2:使用者程式設計介面(API)
系統呼叫不直接與程式設計師進行互動,它僅僅是一個軟中斷機制向核心提交請求以獲得核心服務的介面。實際使用中程式設計師呼叫的通常是使用者程式設計介面-API。
例如,獲取程式號的API函式getpid()對應getpid系統呼叫。但並不是所有的函式都對應一個系統呼叫,有時,一個API函式會需要幾個系統呼叫來共同完成函式的功能,甚至有一些API函式不需要相應的系統呼叫(因此它所完成的不是核心提同的服務)。
在Linux中使用者程式設計介面(API)遵循了在UNIX中的應用程式設計介面標準-POSIX標準。
這些系統呼叫程式設計介面主要是透過C庫(libc)實現的。
3:系統命令
系統命令相對API更高的一層,它實際上是一個可執行程式,他的內部引用了使用者程式設計介面(API)來實現相應的功能。
4. linux 使用者API (核心API,請參考Linux核心API完全手)
一、程式控制:
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 設定後補組標誌清單
回頁首
八、程式間通訊
ipc 程式間通訊總控制呼叫
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、管道
pipe 建立管道
4、訊號量
semctl 訊號量控制
semget 獲取一組訊號量
semop 訊號量操作
5、共享記憶體
shmctl 控制共享記憶體
shmget 獲取共享記憶體
shmat 連線共享記憶體
shmdt 拆卸共享記憶體
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026917/viewspace-2938323/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Activiti 核心API 簡介API
- JAVA核心API學習JavaAPI
- 筆記:API 和 Web API筆記APIWeb
- api和api幫助文件API
- Linux socket APILinuxAPI
- API 和 SDKAPI
- Windows 和 Linux 的IPC API對應表WindowsLinuxAPI
- openssl命令列和API命令列API
- DataStream Api和Data SourcesASTAPI
- C# 和 API (轉)C#API
- Jdk_API——1.8和Jdk_API1.6下載分享JDKAPI
- 利用swagger和API Version實現api版本控制SwaggerAPI
- API 資源和 API 資源集合的輔助修改API
- HBase篇--HBase操作Api和Java操作Hbase相關ApiAPIJava
- Elasticsearch核心技術(五):搜尋API和搜尋執行機制ElasticsearchAPI
- OData API 和 Restful API 這兩個概念的區別和聯絡APIREST
- 使用者領域 API 監控和程式碼注入檢測API
- 免費常用API介面:簡訊API,天氣API,快遞API,識別API...API
- Kubernetes 的核心是API框架而非容器API框架
- Dynamics 365 Web API模擬使用者WebAPI
- [API] 用ASP建立MDaemon使用者 (轉)API
- Jenkins API使用者認證方式JenkinsAPI
- GraphQL API vs REST APIAPIREST
- 在SAP雲平臺的API portal裡建立和管理APIAPI
- SDK和API的區別?API
- redis api的使用和理解RedisAPI
- Zalando RESTful API和事件指南RESTAPI事件
- ASP.NET Web API與Owin OAuth:呼叫與使用者相關的Web APIASP.NETWebAPIOAuth
- 熱門免費api介面:含物流api,簡訊api,天氣api等API
- 2.Vue3的核心api特性以及使用方式VueAPI
- 【API】api 下 session 的 Yes or No?APISession
- 熱門免費API介面,含天氣api、物流API、企業工商API等API
- ecshop /api/client/api.php、/api/client/includes/lib_api.php SQL Injection VulAPIclientPHPSQL
- 淘寶API介面與使用者體驗分析API
- 對比Restful Api和RpcRESTAPIRPC
- Java SPI 和 API,傻傻分不清?JavaAPI
- 工作日和節假日apiAPI
- 搞懂 API ,API 分類全知道API