mirror of
https://github.com/boostorg/process.git
synced 2026-01-19 16:32:15 +00:00
66 lines
1.7 KiB
Plaintext
66 lines
1.7 KiB
Plaintext
= stdio
|
|
|
|
When using io with a subprocess, all three standard streams (stdin, stdout, stderr) get set for the child-process.
|
|
The default setting is to inherit the parent process.
|
|
|
|
This feature meant to be flexible, which is why there is little checking on the arguments assigned to one of those streams.
|
|
|
|
== Pipes
|
|
|
|
asio pipes can be used for io. When using in process_stdio they will get
|
|
automatically connected and the other side will get assigned to the child process:
|
|
|
|
.example/stdio.cpp:20-29
|
|
[source,cpp,indent=0]
|
|
----
|
|
include::../example/stdio.cpp[tag=readable_pipe]
|
|
----
|
|
|
|
readable pipes can be assigned to `out` and `err`, while writable_pipes can be assigned to `in`.
|
|
|
|
== `FILE*`
|
|
|
|
`FILE*` can also be used for either side; this allows the `stdin`, `stderr`, `stdout` macros to be used:
|
|
|
|
.example/stdio.cpp:35-38
|
|
[source,cpp]
|
|
----
|
|
include::../example/stdio.cpp[tag=file]
|
|
----
|
|
|
|
== `nullptr`
|
|
|
|
`nullptr` may be used to set a given stream to be opened on the null-device (`/dev/null` on posix, `NUL` on windows).
|
|
This is used to ignore output or give only EOF as input.
|
|
|
|
.example/stdio.cpp:43-46
|
|
[source,cpp]
|
|
----
|
|
include::../example/stdio.cpp[tag=null]
|
|
----
|
|
|
|
== `native_handle`
|
|
|
|
A native handle can be used as well, which means an `int` on posix or a `HANDLE` on windows.
|
|
Furthermore, any object that has a `native_handle` function which returns a valid type for a stdio stream.
|
|
|
|
E.g. a domain socket on linux.
|
|
|
|
.example/stdio.cpp:52-57
|
|
[source,cpp]
|
|
----
|
|
include::../example/stdio.cpp[tag=native_handle]
|
|
----
|
|
|
|
== popen
|
|
|
|
Additionally, process v2 provides a `popen` class.
|
|
It starts a process and connects pipes for stdin and stdout, so that the popen object can be used as a stream.
|
|
|
|
.example/stdio.cpp:63-66
|
|
[source,cpp]
|
|
----
|
|
include::../example/stdio.cpp[tag=popen]
|
|
----
|
|
|