Function nc::prlimit64

source ·
pub unsafe fn prlimit64(
    pid: pid_t,
    resource: i32,
    new_limit: Option<&rlimit64_t>,
    old_limit: Option<&mut rlimit64_t>
) -> Result<(), Errno>
Expand description

Get/set the resource limits of an arbitary process.

§Example

let mut old_limit = nc::rlimit64_t::default();
let ret = unsafe { nc::prlimit64(nc::getpid(), nc::RLIMIT_NOFILE, None, Some(&mut old_limit)) };
assert!(ret.is_ok());
assert!(old_limit.rlim_cur > 0);
assert!(old_limit.rlim_max > 0);
Examples found in repository?
examples/resource_limit.rs (line 10)
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
fn get_file_limit() {
    let pid = unsafe { nc::getpid() };
    let mut res_limit = nc::rlimit64_t::default();
    let ret = unsafe { nc::prlimit64(pid, nc::RLIMIT_NOFILE, None, Some(&mut res_limit)) };
    assert!(ret.is_ok());
    if ret.is_err() {
        eprintln!("Failed to get file resource limitation!");
    } else {
        println!(
            "Limit of open files, current: {}, max: {}",
            res_limit.rlim_cur, res_limit.rlim_max
        );
    }
}

fn set_file_limit() {
    let pid = unsafe { nc::getpid() };
    let res_limit = nc::rlimit64_t {
        rlim_cur: 512,
        rlim_max: 1024,
    };
    let ret = unsafe { nc::prlimit64(pid, nc::RLIMIT_NOFILE, Some(&res_limit), None) };
    if ret.is_err() {
        eprintln!("Failed to update file resource limitation!");
    } else {
        println!(
            "Update limit of open files, current: {}, max: {}",
            res_limit.rlim_cur, res_limit.rlim_max
        );
    }
}