前言
每個程式都有其使用資源的一個限制,這些資源通常是在程式初始化時由程式 0 所建立的,然後由每個後續程式繼承。
本文將介紹如何獲取並修改程式的資源限制。
獲取資源限制函式:getrlimit()
原型:int getrlimit (int resource, struct rlimit *rlptr)
包含於:sys/resource.h
作用:獲取 resource 資源的限制資訊,將其儲存在 rlptr 所指向的結構體中。( 後面將給出表示 resource 的巨集以及此結構體的定義 )
修改資源限制函式:setrlimit()
原型:int setrlimit (int resource, const struct rlimit *rlptr)
包含於:sys/resource.h
作用:將資源 resource 加上 rlptr 所指結構體所描述的限制。
resource 取值
資源限制結構體 rlimit
1 struct rlimit { 2 rlim_t rlim_cur; // 軟限制 3 rlim_t rlim_max; // 硬限制 4 };
修改資源限制必須遵循的三條規則
1. 任何一個程式都可以將一個軟限制更改為小於或等於其硬限制值。
2. 任何一個程式都可降低其硬限制值,但它必須大於或等於其軟限制值。這種降低對於普通使用者來說是不可逆的。
3. 只有超級使用者可以提高硬限制值。
程式碼實現
下程式獲取程式的最大棧容量並列印出來:
1 #include <stdio.h> 2 #include <sys/resource.h> 3 4 int main (void) { 5 6 // 定義儲存程式資源限制的結構體 7 struct rlimit l; 8 9 // 獲取程式資源限制資訊 10 if (getrlimit (RLIMIT_FSIZE, &l)) { 11 printf("獲取資源限制資訊出錯\n"); 12 return 1; 13 } 14 15 // 列印資源限制資訊 16 printf("軟限: %ld\n硬限: %ld\n", l.rlim_cur, l.rlim_max); 17 18 return 0; 19 }
執行測試
至於為什麼是 -1,這裡不去糾結這個問題了。
小結
要注意更改資源限制的那三條規則。