С того момента, как вы вызываете fork
, вы можете быть уверены, что все написанное в канале будет прочитано дочерним процессом:
- Если родитель пишет что-то, а потомок не читает его сразу, он будет оставаться в буфере канала до тех пор, пока потомок не прочитает.
- Если ребенок начинает читать до того, как родитель начинает писать, тогда
read
ребенка будет блокироваться, пока не будет что-то прочитать.
Возможно, вы захотите close(p[1])
после записи в него в родительском элементе, чтобы ребенок мог правильно распознать конец данных. Это не проблема в вашем конкретном случае, поскольку вы записываете фиксированный объем данных и читаете точно такой же объем, но в общем случае лучше всего закрыть канал после записи в него.
Не о чем беспокоиться. Единственное, что было бы лучше, если бы у вас была действительно длинная строка, это читать и писать в чанках и обрабатывать каждый чанк отдельно в дочерних элементах, чтобы ваша программа не использовала слишком много памяти, чтобы сохранить то, что ей не нужно.
Кроме того, примечание: при использовании строковых литералов "like this"
вам не нужно добавлять терминатор NUL \0
, он добавляется автоматически.