[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Problems with lposix on win32
- From: Rici Lake <lua@...>
- Date: Sat, 14 Jan 2006 13:53:43 -0500
On 14-Jan-06, at 1:34 PM, Wim Couwenberg wrote:
You can use ShellExecute.
ShellExecute (and CreateProcess) create a *new* process (if file is an
executable that is.) The posix exec family replaces the executable
image of the running process. Very different models...
Also, the command parsing model is different. With exec(), you specify
the argv array directly, so there is less need to worry about
metacharacters (it is still possible that the utility will misinterpret
an argument starting with a '-', though.) With ShellExecute and
CreateProcess, you provide an unparsed command line, which is much
riskier if you're constructing it from user input.
(In checking the MSDN Library, I also discovered this interesting
tidbit:
The Unicode version of this function, CreateProcessW,
can modify the contents of this string. Therefore, this
parameter cannot be a pointer to read-only memory (such
as a const variable or a literal string) or the function
could cause an access violation.
Or, in the case of a Lua binding, modify a Lua string with potentially
disastrous consequences.
Leaving all that aside, though, wouldn't it be possible to implement a
higher-level interface which did fork+exec on Unix and CreateProcess on
Windows? That's a fairly commmon situation, anyway. CreateProcess seems
to be able to specify stdin/stdout/stderr for the newly created
process, which is what would normally done in the gap between the
fork() and the exec() in Unix, so there is some hope for an interface
which would work on both. Although I'm not sure how I would handle
quoting of "shell" metacharacters.