getrlimit()函式
getrlimit,中文名為Unix系統函式,應用於電腦系統。
- 中文名
- Unix系統函式
- 外文名
- getrlimit
- 類 型
- 軟體程式設計
- 領 域
- 電腦系統
簡介
編輯大綱
編輯#include <sys/resource.h>
int getrlimit(int resource, struct rlimit *rlp);
int setrlimit(int resource, const struct rlimit *rlp);
描述
編輯在作業系統中,我們能夠通過函式getrlimit()、setrlimit()分別獲得、設定每個程式能夠建立的各種系統資源的限制使用量。
呼叫getrlimit()或者setrlimit()來操作指定資源的操作上限。資源限制是一對值:一個指定了當前(軟)限制,另一個則代表一個最大(硬)限制。軟限制能夠被一個程式改變,只要保證它不大於硬限制。一個程式能夠(不能夠撤回的)降低它的硬體限制,前提是大於等於軟限制。僅當一個程式工作在一個系統超級使用者許可權下時能夠提高它的硬體限制。呼叫setrlimit()來改變硬限制和軟限制。限制值可能是一個“無窮大”值:RLIM_INFINITY。引數rlp是一個指向結構體rlimit的指標,該結構體包含如下成員:
rlim_t rlim_cur; /*當前(軟)限制*/
rlim_t rlim_max; /*硬限制*/
型別rlim_t是一個算術資料型別,等同於型別int,size_t,和off_t。
資源限制型別概要描述如下:
RLIMIT_CORE
core檔案的最大位元組數,若其值為0則阻止建立core檔案。
RLIMIT_CPU
CPU時間的最大量值(秒),當超過此軟限制時,向該程式傳送S I G X C P U訊號。
RLIMIT_DATA
RLIMIT_FSIZE
可以建立的檔案的最大位元組長度。當超過此軟限制時,則向該程式傳送SIGXFSZ訊號。
RLIMIT_NOFILE
每個程式能開啟的最多檔案數。
RLIMIT_STACK
棧的最大位元組長度。系統不會動態增加棧的大小限制。
在程式內部,setrlimit()將增加限制以適合您的棧大小,而不會移動當前記憶體段來允許增長。為了保證程式的棧能夠增長,限制必須首先改變以適應執行程式使用的新棧大小。
在一個多執行緒的程式中,若線上程中呼叫setrlimit(),而該執行緒不是主執行緒,則對於棧的限制沒有任何改變。使用引數RLIMIT_STACK來呼叫setrlimit()僅僅能夠影響主執行緒的棧,並且該工作本來就應該由主執行緒來完成。
當超越棧大小限制時,訊號SIGSEGV會發給程式。如果程式忽略該訊號,或者捕捉該訊號但是沒有設定處理措施,該訊號預設設定為SIG_DFL處理方案。
RLIMIT_VMEM
可映照地址空間的最大位元組長度。
RLIMIT_AS
程式可用記憶體最大位元組數。
因為限制資訊儲存在每個程式的資訊中,shell建立限制命令必須直接呼叫這兩個系統函式來影響該shell以後建立的所有程式。
下面資源當前限制的值會影響相對應巨集定義的展開。
限制 巨集定義展開
RLIMIT_FSIZE FCHR_MAX
RLIMIT_NOFILE OPEN_MAX
當使用函式getrlimit(),如果一個資源限制能夠被正確賦值為型別rlim_t,則該值將被返回;否則,如果該資源限制等同於相應的硬體限制,返回值是RLIM_SAVED_MAX;否則返回值是RLIM_SAVED_CUR。
當使用函式setrlimit(),如果請求新的限制值為RLIM_INFINITY,新的限制將是“無限制”;否則如果請求的新的限制為RLIM_SAVED_MAX,新的限制將被儲存為硬體限制;如果請求的新的限制為RLIM_SAVED_CUR,新的限制將被儲存為軟限制;否則新的限制將賦值為請求的值。另外,如果相應傳入的限制值正確,則該限制將作為新的限制值。
設定一個限制為RLIM_SAVED_MAX或者RLIM_SAVED_CUR的結果是未知的,除非在之前呼叫getrlimit以瞭解相應的軟限制或者硬限制值。
一個限制允許其值大於RLIM_INFINITY。
返回值
編輯成功完成後,getrlimit()和setrlimit()返回0。否則,返回-1並設定errno指定相應錯誤。
錯誤
編輯函式getrlimit()和函式setrlimit()失敗情況如下:
EFAULT
引數rlp指向非法地址。
EINVAL
指定了一個無效的資源;或者在呼叫函式setrlimit()時新的rlim_cur值超過了新的rlim_max值。
EPERM
呼叫函式setrlimit試圖增加最大限制值,但該程式並不屬於超級使用者。
函式setrlimit可能失敗情況:
EINVAL
指定的限制值不能去減低限制值因為當前用法已經大於該指定限制值。
相關文章
- C語言系統資源控制(getrlimit && setrlimit)C語言MIT
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- 【函式式 Swift】函式式思想函式Swift
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- 字元函式、數字函式和日期函式字元函式
- 【函式】Oracle EXTRACT()函式與to_char() 函式函式Oracle
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 【函式】ORACLE函式大全函式Oracle
- (譯) 函式式 JS #2: 函式!函式JS
- 核函式 多項式核函式 高斯核函式(常用)函式
- 函式名/函式地址/函式指標函式指標
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- js函式 函式自呼叫 返回函式的函式 (閉包)JS函式
- main函式的入口函式AI函式
- (函式)實現strstr函式函式
- 字串函式之Strtok()函式字串函式
- SQL函式之日期函式SQL函式
- Oracle聚合函式/分析函式Oracle函式
- fork函式與vfork函式函式
- 常用函式--時間函式函式
- ORACLE單行函式與多行函式之七:多行函式之分組函式示例Oracle函式
- 函式式JavaScript(4):函式柯里化函式JavaScript
- 箭頭函式、簡寫函式、普通函式的區別函式
- Oracle OCP(03):字元函式、數字函式和日期函式Oracle字元函式
- webgl內建函式--幾何函式與矩陣函式Web函式矩陣
- webgl內建函式--向量函式與紋理查詢函式Web函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- 深入理解 函式、匿名函式、自執行匿名函式函式
- Mysql 常用函式(15)- upper 函式MySql函式
- webgl內建函式--指數函式Web函式
- webgl內建函式--通用函式Web函式
- 類函式和物件函式 PHP函式物件PHP
- 聚合函式與數字函式函式