[fpc-pascal] POpen en PClose
Adriaan van Os
adriaan at adriaan.biz
Tue Jul 21 08:07:48 CEST 2026
On 20/07/2026 12:02, Marco van de Voort via fpc-pascal wrote:
>
> Op 20-7-2026 om 11:57 schreef Michael Van Canneyt via fpc-pascal:
>>>>
>>>> I am looking at the implementation of POpen and PClose in the
>>>> runtime-library for Darwin (or more general for UNIX). It seems
>>>> like it doesn't call into libc popen and pclose, but instead
>>>> follows its own implementation in unix.pp in POpen_internal. I am
>>>> just curious to know the reason.
>>>>
>>> Phew, that was over twenty years ago, but afaik the reason is that
>>> libc popen and pclose us C FILE descriptors, which the RTL in
>>> general doesn't use to avoid a mix of functions with pascal and C
>>> file types.
>>>
>>> So popen/pclose are a more high level (FILE * using) part of libc,
>>> while we tend to only use the basis.
>>
>> Glad our memories agree on this :-)
>
> Well aside from the fact that FreeBSD was the architecture where the
> baseunix/unix RTL was done. The port to Linux was only done later :-)
>
> This shows the tension a bit between libc the system lib, and libc the
> C runtime. We are only interested in the system lib part.
Another question. POpen has a file as input parameter. The description
in unix.pp says
"Starts the program in 'Prog' and makes it's input or out put the
other end of a pipe. If rw is 'w' or 'W', then whatever is written to
F, will be read from stdin by the program in 'Prog'. The inverse is true
for 'r' or 'R' : whatever the program in 'Prog' writes to stdout, can be
read from 'f'."
So, for write mode, it doesn't use StdOut but a file. Does this imply
that (for writing) I can call POpen with multiple files, forking and
running multiple programs, writing to each of these child processes
through a different pipe ?
Regards,
Adriaan van Os
More information about the fpc-pascal
mailing list