Кто-нибудь знает, как bash обрабатывает отправку данных через каналы?
cat file.txt | tail -20
Эта команда выводит все содержимое файла file.txt в буфер, который затем считывается хвостом? Или эта команда, скажем, печатает содержимое файла file.txt по очереди, а затем останавливается в каждой строке для обработки хвоста, а затем запрашивает больше данных?
Причина, по которой я спрашиваю, заключается в том, что я пишу программу на встроенном устройстве, которая в основном выполняет последовательность операций над некоторым фрагментом данных, где вывод одной операции отправляется как вход следующей операции. Я хотел бы знать, как работает linux (bash), поэтому, пожалуйста, дайте мне общий ответ, а не конкретно, что происходит, когда я запускаю "cat file.txt | tail -20".
Заранее благодарю за ваши ответы!
EDIT: Shog9 указал на соответствующую статью в Википедии, это не привело меня непосредственно к статье, но помогло мне найти это: http://en.wikipedia.org/wiki/Pipeline_%28Unix%29#Implementation у меня была информация, которую я искал.
Мне жаль, что я не понимаю. Конечно, вы используете трубку, и, конечно, вы используете stdin и stdout из соответствующих частей команды. Я предположил, что это слишком очевидно, чтобы заявить.
Я спрашиваю, как это обрабатывается/реализуется. Поскольку обе программы не могут работать сразу, как данные отправляются из stdin в stdout? Что произойдет, если первая программа генерирует данные значительно быстрее, чем вторая программа? Система запускает только первую команду до тех пор, пока она не будет завершена или не будет заполнен буфером stdout, а затем перейдите к следующей программе и так далее в цикле, пока не останется больше данных для обработки или есть более сложный механизм