APUE Learning Example Source Code
guowenxue
2019-06-26 d6cf0a8e8580978f8bd7dbb3965255b96851bb7f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>  
#include <string.h>
#include <errno.h>
#include <sys/resource.h>  
  
void print_limits(char* name, int resource)
           struct rlimit limit;  
    if(getrlimit(resource, &limit) <0)
    {  
        printf("getrlimit for %s failure: %s\n", strerror(errno));  
        return ;
    }  
    
    printf("%-15s ",name);  
    if(limit.rlim_cur == RLIM_INFINITY)
    {  
        printf("(infinite)     ");  
    }
    else
    {  
        printf("%-15ld",limit.rlim_cur);  
    } 
 
    if(limit.rlim_max == RLIM_INFINITY)
    {  
        printf("(infinite)     ");  
    }else
    {  
        printf("%-15ld",limit.rlim_max);  
    }  
    printf("\n");  
}  
 
int main(void)
{  
    struct rlimit limit = {0};
 
    print_limits("RLIMIT_NPROC", RLIMIT_NPROC);
    print_limits("RLIMIT_DATA", RLIMIT_DATA);
    print_limits("RLIMIT_STACK", RLIMIT_STACK);
    print_limits("RLIMIT_NOFILE", RLIMIT_NOFILE);
 
    printf("\nAfter set RLIMIT_NOFILE:\n");
    getrlimit(RLIMIT_NOFILE, &limit );
    limit.rlim_cur  = limit.rlim_max;
    setrlimit(RLIMIT_NOFILE, &limit );
 
    print_limits("RLIMIT_NOFILE", RLIMIT_NOFILE);
 
    return 0;
}