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}