os: add os.execvp/2
parent
2795f929fa
commit
ef786f9a75
|
@ -22,6 +22,8 @@ fn C.fdopen(int, string) voidptr
|
|||
|
||||
fn C.CopyFile(&u32, &u32, int) int
|
||||
|
||||
fn C.execvp(file charptr, argv &charptr) int
|
||||
|
||||
// fn C.proc_pidpath(int, byteptr, int) int
|
||||
struct C.stat {
|
||||
st_size int
|
||||
|
@ -866,3 +868,21 @@ pub fn create(path string) ?File {
|
|||
is_opened: true
|
||||
}
|
||||
}
|
||||
|
||||
// execvp - loads and executes a new child process, in place of the current process.
|
||||
// The child process executable is located in `cmdpath`.
|
||||
// The arguments, that will be passed to it are in `args`.
|
||||
// NB: this function will NOT return when successfull, since
|
||||
// the child process will take control over execution.
|
||||
pub fn execvp(cmdpath string, args []string) ? {
|
||||
mut cargs := []charptr{}
|
||||
cargs << cmdpath.str
|
||||
for i in 0 .. args.len {
|
||||
cargs << args[i].str
|
||||
}
|
||||
cargs << charptr(0)
|
||||
res := C.execvp(cmdpath.str, cargs.data)
|
||||
if res == -1 {
|
||||
return error(posix_get_error_msg(C.errno))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue