> In good old days the Turbo Pascal had an EXEC procedure that could > execute another program by invoking the DOS command interpreter.
Dos.exec still exist, but as a substitute sysutils.ExecuteProcess is recommended. (1.9.2+ though) Note that both don't exec the command itself. > I have found in the unix unit a function FPEXECV(path, pp) that may be > used for it, but it leaves a few questions to me. > > According to the docs the function does not return (if it succeeds). Is > there no way of calling another program and then continue the calling > program? Could it be done by starting a new thread, putting the call > into that thread and let that thread not return while the main program > continues? Will it leave allocated memory, that is never freed? See the earlier replies (and the source of executeprocess) > In the doc?s example the FPEXECV(path, pp) has the same pchar in the > path and as the first pchar of the pchar array that pp points to. I have > tried similar examples, and they always seem to work with the same phar > in the two places, but not otherwise. Is there some deeper philosophy in > having the program-name in both path and in the first phar of the array? Note that fp* calls are calls that roughly comply to unix standards. A man page for the call minus the "fp" is usually available. (so "man execv" in this case). From the FreeBSD version: ..... The first argument, by convention, should point to the file name associated with the file being executed. The list of arguments must be terminated by a NULL pointer..... So the answer is "by convention" :-) Also have a look at the tprocess class in the VCL, it allows for executing processes and keeping pipes to it open. Only if these two instruments (tprocess/executeprocess) are not enough, then you need to mess with OS specific routines like execv, or windows like shellexecute. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal