#include <sys/resouece.h>
函式定義
int getpriority(int which, id_t who) 取得優先權設定資料
int setpriority(int which, id_t who, int priority) 設定優先權
int getrlimit(int resource, struct rlimit *r_limit) 取得系統資源限制資料
int setrlimit(int resource, conset struct rlimit *r_limit) 設定系統限制資源資料
int getrusage(int who, struct rusage *r_usage) 取得CPU 消耗時間資料
程式說明
取得CPU 使用資訊與設定系統資源限制,並設定檔案限制測試產生錯誤訊息。
編譯方式
gcc -o limit limit.c -lm
執行結果
$./limit
$CPU usage: user = 0.000000, system = 0,009998
current priority = 0
current FSIZE limit: soft=-1, hard=-1
seeting a 2k file zise limit
檔案大小超過上限
程式碼
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/times.h>
void work()
{
FILE *f;
int i;
double x = 4.5;
f = tmpfile();
for(i = 0; i < 10000; i++){
fprintf(f, "do some output\n");
if(ferror(f)){
fprintf(stderr, "error writing to tmporary file\n");
exit(1);
}
}
for(i = 0; i < 10000; i++){
x = log(x*x + 3.21);
}
}
int main()
{
struct rusage r_usage;
struct rlimit r_limit;
int priority;
work();
getrusage(RUSAGE_SELF, &r_usage);
/*取的CPU 使用資訊*/
printf("CPU usage: user = %ld.%06ld, system = %ld,%06ld\n",
r_usage.ru_utime.tv_sec, r_usage.ru_utime.tv_usec,
r_usage.ru_stime.tv_sec, r_usage.ru_stime.tv_usec);
/*取的目前優先權狀況*/
priority = getpriority(PRIO_PROCESS, getpid());
printf("current priority = %d\n", priority);
/*檔案限制狀況*/
getrlimit(RLIMIT_FSIZE, &r_limit);
printf("current FSIZE limit: soft=%ld, hard=%ld\n",
r_limit.rlim_cur, r_limit.rlim_max);
/*設定檔案限制*/
r_limit.rlim_cur = 2048;
r_limit.rlim_max = 4096;
printf("seeting a 2k file zise limit\n");
setrlimit(RLIMIT_FSIZE, &r_limit);
work();
return 0;
}
>>歡迎前往Superfunction C Language
沒有留言:
張貼留言