можем ли мы с уверенностью предположить, что будет только одна строка для чтения, или возможен сценарий ios, когда в буфере ожидает несколько строк, что означает, что мы должны вызвать fgets()
или getline()
, пока они не наберут EOF
(или EAGAIN
/ EWOULDBLOCK
для неблокирующих потоков)?
Я украду соответствующую часть из этого ответа (то есть в свою очередь, связано со стандартом C11):
Когда поток буферизируется по строкам, символы предназначены для передачи в или из среды хоста в виде блока, когда встречается символ новой строки.
Таким образом, буферизация строки не означает, что все данные буферизуются в одной строке, но вместо этого данные отправляются, как только появляется новая строка.
Как следствие, ответ на ваш вопрос: возможны сценарии ios, в которых несколько строк ожидают чтения (в зависимости, конечно, от того, что на самом деле отправлено из вашего дочернего процесса).