1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Component\Process\Pipes;
13
14/**
15 * PipesInterface manages descriptors and pipes for the use of proc_open.
16 *
17 * @author Romain Neutron <imprec@gmail.com>
18 *
19 * @internal
20 */
21interface PipesInterface
22{
23    public const CHUNK_SIZE = 16384;
24
25    /**
26     * Returns an array of descriptors for the use of proc_open.
27     */
28    public function getDescriptors(): array;
29
30    /**
31     * Returns an array of filenames indexed by their related stream in case these pipes use temporary files.
32     *
33     * @return string[]
34     */
35    public function getFiles(): array;
36
37    /**
38     * Reads data in file handles and pipes.
39     *
40     * @param bool $blocking Whether to use blocking calls or not
41     * @param bool $close    Whether to close pipes if they've reached EOF
42     *
43     * @return string[] An array of read data indexed by their fd
44     */
45    public function readAndWrite(bool $blocking, bool $close = false): array;
46
47    /**
48     * Returns if the current state has open file handles or pipes.
49     */
50    public function areOpen(): bool;
51
52    /**
53     * Returns if pipes are able to read output.
54     */
55    public function haveReadSupport(): bool;
56
57    /**
58     * Closes file handles and pipes.
59     */
60    public function close();
61}
62