linux使用者api和核心api

有頭髮的程式猿發表於2023-03-06

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章