On 14/12/2023 20:54, Marco van de Voort via fpc-devel wrote:

Op 14-12-2023 om 20:29 schreef Martin Frb via fpc-devel:
 Op 14-12-2023 om 17:30 schreef Martin Frb via fpc-devel:
If I am right the TProcess currently does not allow redirection of StdOut/In to/from a file (or other handle provided).

It does, if you need a runcommandloop like routine that writes to file. Partially this can be even simplified by inheriting TProcess and overriding readinputstream
But that means the parent process has to read the data (from the file) and forward it.

Without a shell that always needs to happen. How else ? Keep in mind that TProcess is a kernel and not a shell level concept.

At least on Windows you can give a handle that is to be used as StdIn.

And on Linux that handle is currently setup after the fork event, in the new process => and currently it either is a pipe or (I think) a copy of the parent stdin. But nothing stops it to be a filehandle. But afaik StdIn is just a handle. This handle can be a tty (usually if there is a shell), but it can be /dev/nil or a file or ...

I am actually pretty sure, on Linux, I can get what I want by doing it in the "OnFork" event of TProcess. But on Windows it is well hidden away in the "Execute" method, nothing virtual that could be intercepted.




Also not sure how to simulate an EOF in that case....

Probably close the pipe.

Anyway the full project is here: http://www.stack.nl/~marcov/files/processmemodemo.zip

It is slightly different, a TProcess based application that tries to instrument a secondary binary.


Thanks, but I consider that a worst case work around.

I'd rather copy the entire TProcess, so I can make a few tiny changes in TProcess.Execute.
I already done a proof of concept on win:
- get the handle to the file
- pass it to the WinAPI for creating the process
=> works.

Haven't yet looked at Linux. But should be even easier.

-----

The reason I ask is, that if there is a chance of a future solution in FPC, then I like to avoid my own solution now until I can at least do my own solution in a compatible manner.
For that I would have to know enough details on that future solution.

Well depending on the amount of changes, I may still do my own incompatible....

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to