[fpc-pascal] POpen en PClose

Michael Van Canneyt michael at freepascal.org
Tue Jul 21 08:11:44 CEST 2026



On Tue, 21 Jul 2026, Adriaan van Os via fpc-pascal wrote:

>
>
> 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 ?

If your question is, can you use POpen multiple times, then the answer is
yes.

Michael.


More information about the fpc-pascal mailing list