Skip to main content

execveat

Function execveat 

Source
pub unsafe fn execveat<P: AsRef<Path>>(
    fd: i32,
    filename: P,
    argv: &[P],
    env: &[P],
    flags: i32,
) -> Result<(), Errno>
Expand description

Execute a new program relative to a directory file descriptor.

ยงExamples

Specify program file via filename:

let args = ["ls", "-l", "-a"];
let env = ["DISPLAY=:0"];
let ret = unsafe { nc::execveat(nc::AT_FDCWD, "/bin/ls", &args, &env, 0) };
assert!(ret.is_ok());

Or via an opened file descriptor fd, leaving filename empty:

let args = ["ls", "-l", "-a"];
let env = ["DISPLAY=:0"];
let ret = unsafe { nc::openat(nc::AT_FDCWD, "/bin/ls", nc::O_RDONLY | nc::O_CLOEXEC, 0) };
assert!(ret.is_ok());
let fd = ret.unwrap();
let ret = unsafe { nc::execveat(fd, "", &args, &env, nc::AT_EMPTY_PATH) };
assert!(ret.is_ok());
Examples found in repository?
examples/exec.rs (line 17)
13fn call_date() {
14    println!("[date] pid: {}", unsafe { nc::getpid() });
15    let args = ["date", "+%Y:%m:%d %H:%M:%S"];
16    let env = ["DISPLAY=:0"];
17    let ret = unsafe { nc::execveat(nc::AT_FDCWD, "/bin/date", &args, &env, 0) };
18    assert!(ret.is_ok());
19}
20
21fn call_id() {
22    let ret = unsafe { nc::openat(nc::AT_FDCWD, "/usr/bin/id", nc::O_RDONLY | nc::O_CLOEXEC, 0) };
23    assert!(ret.is_ok());
24    let fd = ret.unwrap();
25    let args = ["id", "-u", "-n"];
26    let env = ["DISPLAY=:0"];
27    let ret = unsafe { nc::execveat(fd, "", &args, &env, nc::AT_EMPTY_PATH) };
28    assert!(ret.is_ok());
29}