Как закрыть трубу: Как закрыть трубы в туалете
Содержание
способы закрыть стояк вдоль стены и в углу, фото и видео результатов
Кухня – самая рабочая и часто используемая комната дома. Здесь готовят пищу, завтракают, обедают, ужинают, общаются с родными и близкими друзьями. В то же время кухня – самое технологичное помещение в доме, и к половине техники на кухне подведены всевозможные коммуникации: газопроводы и водопроводы трубы, воздуховод вытяжки, трубы отопления и канализации.
Мы приветствуем нашего постоянного читателя! Наша статья рассказывает о том, как спрятать трубы на кухне. Множество труб не вписываются в наше понятие об эстетичности, собирают пыль и копоть, придают обстановке кухни неряшливый и несколько неупорядоченный вид.
Можно ли прятать трубы на кухне
Закрывать и маскировать трубопроводы на кухне можно различными способами. Можно прятать в мебель; зашивать коробами или фальшстеной; закрывать экранами, пластиковыми коробами; декорировать мозаикой и различными украшениями, декупажем; окрашивать под цвет стен и или в контрастный цвет и «встраивать» в интерьер кухни. Особые требования существуют только для газовых трубопроводов – они приведены ниже.
Главное – должен быть доступ к местам соединений и запорной арматуре. Особо хочется сказать про прокладку трубопроводов в стенах – в несущих конструкциях пробивать штробы запрещено – это ослабляет прочность конструкций. То есть во всех блочных, панельных и монолитных многоквартирных домах штробить стены нельзя – это чревато штрафом и предписанием о ремонте стены и переносе труб в исходное положение, а в худшем случае может спровоцировать разрушение стен или перекрытий.
Встречаются дома довоенной и «сталинской» постройки с штукатуркой слоем до 3-4 см – в них разбить штукатурку и проложить тонкие трубы (диаметром до 32 мм) возможно. В частных домах на этапе постройки можно устроить ниши для трубопроводов.
Раньше в штукатурке прокладывали стальные трубопроводы – они были достаточно стабильны при повышении температуры. Сейчас прокладывают пластик – он не ржавеет, очень долговечен, но имеет высокий коэффициент линейного расширения, и тонкий слой штукатурки над ним начнет разрушаться, Над трубой горячей воды и отопления начнут отставать обои, а лет через 7-8 плитка.
Над трубопроводом холодной воды может собираться конденсат и последствия будут такими же. Конечно, это не критично, но при планировании скрыть коммуникации в стенах стоит учитывать возможные последствия.
Что говорят нормы и правила
Особые требования существуют только к газовым коммуникациям. Согласно СНиП 42-01-2002 при скрытой прокладке трубопроводов предусматривают дополнительные меры по защите и коррозии и обеспечивают возможность осмотра и восстановления защитных покрытий. То есть должны быть лючки для осмотра и возможность разборки короба. Короба и чехлы не должны быть полностью глухими – должна быть предусмотрена возможность их вентиляции.
Однозначно должен быть легкий доступ к местам установки счетчиков и местам подключения бытовых газовых приборов (газовых печей, газовых колонок, отопительных котлов). Доступ должен обеспечивать удобную возможность снятия и установки газовых счетчиков, запорной арматуры, гибких шлангов.
Если Вы переносите газовые приборы и трубопроводы, то эти работы согласуются с газопоставляющей компанией; выполняется проект; сами работы производятся специализированной организацией, имеющей лицензию на право выполнения работ с газовыми аппаратами и коммуникациями. С газом не шутят!
Категорически запрещается прокладывать коммуникации, особенно газовые, в вентиляционных каналах.
При скрытой проводке водопроводных коммуникаций должен быть свободный доступ ко всем соединениям и запорной арматуре.
Преимущества и недостатки сокрытия труб
Преимущества сокрытия труб:
- Эстетичность – закрыв трубопроводы коробом или замаскировав окраской или декором, можно украсить дизайн кухни или сделать трубопроводы невидимыми.
- Скрытые трубы облегчают уборку – легче вымыть ровную поверхность короба, чем конструкции с соединительными муфтами и фитингами.
- Небольшие финансовые затраты.
Недостатки:
- В случае ремонта придется вскрывать стену, конструкции из гипсокартона или декоративные экраны и короба; при утечке воды могут намокнуть стены, пол, мебель и соседи.
- То же касается труб канализации.
- Устройство коробов достаточно трудоемко и требует определенных материальных затрат.
- При неглубокой прокладке пластиковых трубопроводов горячей воды и отопления в стенах пластик будет «вести», верхний штукатурки в этом месте будет осыпаться. Поэтому пластик стоит прокладывать в слое штукатурке в металлическом чехле и с утеплением. Конструкция получается громоздкая – легче зашить коммуникации гипсокартоном.
Способы маскировки
Способы маскировки труб делятся на несколько групп:
- Сокрытие труб с помощью коробов, чехлов, фальшстен.
- Маскировка с помощью окраски.
- Визуальное скрытие при помощи мебели или штор.
- Декорирование – украшение трубопровода, декорирование листьями, цветами, кокосовым волокном, мозаикой, другими отделочными материалами, декупаж.
Короб
Короб, обшитый гипсокартоном, пластиком, вагонкой, МДФ, ЛДСП позволяет аккуратно зашить трубы в углу или имитировать выступ стены или уступ стены под потолком. Нельзя таким образом зашивать газовые трубы. Отделать конструкции из гипсокартона можно краской, плиткой, обоями.
Иногда делают не короб, а красивый экран из пластика с рисунком с открытым верхом – получается украшение кухни. В качестве коробов иногда используют кабель-каналы (их можно обклеить пленкой под дерево), при монтаже отопления вблизи пола применяют специальные пластиковые плинтуса.
В качестве отделки короба можно вставить решетки и декоративные стекла с рисунком и подсветить с помощью светодиодной ленты – получится настоящее украшение помещения. Такой тип отделки часто применяют, когда подвод отопления подходит к батарее горизонтально вдоль стены.
Шкафы и навесные шкафчики
Единственный разумный способ спрятать канализационный отвод от мойки и подвод водопровода – это размещение их в столах-тумбах. Этот способ позволяет скрыть не слишком эстетичный сифон и обеспечить к нему легкий доступ для прочистки.
Проводка газопровода над мебелью позволяет полностью визуально скрыть трубы. В шкафах можно разместить воздуховод вытяжки (и саму вытяжку встроить в подвесной шкафчик). Газовый стояк можно зашить пеналом от пола до потолка с открывающейся дверцей и вентиляционными решетками вверху и внизу. Очень эффективный способ маскировки трубопроводов.
Рейлинги
Газовые трубы, проходящие под подвесными шкафчиками, можно задекорировать под рейлинг. Для этого трубу тщательно очищают от краски и ржавчины и окрашивают блестящей краской для имитации никелирования. На такой рейлинг нельзя вешать тяжелые полки – максимум несколько кухонных инструментов. Еще лучше под газопроводом повесить настоящий рейлинг и все предметы вешать на него, а газовую трубу оставить в качестве декоративного элемента. Желательно на видимой части газопровода заменить кронштейны стальными и блестящими.
Декор
Способов декорировать трубы огромное множество:
- Покраска, декоративная роспись.
- Превращение труб в стволы и ветви деревьев – окраска, оклейка кокосовым волокном, пробкой, листьями, цветами, фруктами и цитрусовыми.
- Оклейка бамбуком; имитация бамбука с помощью наклеенных веревок и покраски.
- Художественная лепка и роспись.
- Оклейка обоями.
- Для декорирования трубы обматывают веревкой из джута, применяют текстиль.
- Рисуют на стене рисунок и делают трубу центром композиции.
Мозаика
Бывают случаи, когда после перепланировки и объединения кухни с кладовой в кухне проходит канализационный стояк. Его можно обклеить мелкой мозаичной плиткой, камешками, декоративной мозаиками. Так же можно задекорировать и габаритную трубу вытяжки.
Декупаж
Для декупажа используют обычные столовые трехслойные салфетки с рисунками. Трубы моют, сушат. Примеряют и обрезают салфетки. Отслаивают верхний слой салфетки, на трубопровод наносится клей ПВА и приклеивается слой салфетки с рисунком. Высушивается. Красится акриловым лаком. Простая технология дает очень интересные эффекты – получаются яркие блестящие рисунки.
Какой способ лучше?
Сначала стоит оценить общее состояние кухни — если ремонт уже старый, стоит просто задекорировать трубу или перекрасить. Вариантов декорирования очень много. При капитальном ремонте с заменой мебели можно планировать и подгонку шкафчиков, и зашивку трубопроводов в короба. Оригинально отделанные трубы могут определить стиль оформления кухни.
Советы по выбору материала для маскировки
Если Вы хотите совсем закрыть трубы, то лучше гипсокартона ничего не придумать – его можно красить, облицовывать плиткой, оклеивать обоями. Вагонку необходимо покрывать лаком, с нее хуже отмываются капли жира. Рейлинги и кабель-каналы – на любителя. Замечательно смотрятся самые разные декоры «под дерево» с листьями, цветами и фруктами. У каждого материала есть свои плюсы и минусы.
Как правильно скрыть трубы своими руками
Гипсокартонный короб – достаточно сложная конструкция, но его вполне возможно смонтировать своими руками.
Необходимые инструменты и материалы
Для установки короба понадобятся:
- Гипсокартон влагостойкий.
- Профиль стоечный и направляющий.
- Крепления-крабы.
- Шуруповерт.
- Саморезы по металлу.
- Шурупы по гипсокартону.
- Болгарку с отрезными дисками для металла и гипсокартона.
- Дюбеля 6×60.
Ход работ
Сначала крепят направляющие профиля дюбелями к стене, затем, перпендикулярно — перемычки из стоечного профиля; угол жесткости лучше выполнить из одного или двух скрученных саморезами по металлу между собой направляющих профилей (27×28 мм) или с помощью соединений-крабов.
Затем каркас обшивают ГКЛ с помощью саморезов. Гипсовые листы грунтуют, затем шпаклюют, грунтуют, окрашивают или оклеивают обоями, облицовывают плиткой. Закрывают место выхода труб к батарее специальной декоративной накладкой.
Фото результата
На видео можно увидеть все особенности процесса, на фото – результат.
Частые ошибки и проблемы при маскировании
При установке короба вокруг труб отопления необходимо изолировать трубы с помощью специальных чехлов из полиэтилена или пенополиуретана.
Заключение
Мы прощаемся с нашим читателем и желаем ему оригинальных идей при ремонте кухни. Отделав свою кухню без помощи дизайнера, Вы получите эксклюзивное помещение, оформленное точно по Вашему вкусу. Подписывайтесь на нашу рассылку, предлагайте нашу информацию друзьям, близким, коллегам, делитесь с ними идеями и приводите на наш сайт.
Как закрыть трубы на кухне: прячем и декорируем коммуникации
Вентиляция и газовая труба
Трубы на кухне нарушают эстетичный вид помещения и создают неудобства для размещения мебели. Поэтому их стараются спрятать, убрать, задекорировать. В этом случае приемлемо любое скрытие, которое не изменит эксплуатационных характеристик кухонного пространства. В статье рассмотрим основные способы маскировки труб на кухне.
Как спрятать водопроводные и канализационные трубы
Проще всего спрятать трубы водопровода и канализации. Они укладываются за кухонным гарнитуром, поэтому не видны. Проблемы не возникают, если в кухне устанавливается остров, куда монтируется раковина для мытья посуды. Водопроводные и канализационные трубы укладывают под напольное покрытие, вследствие чего их не видно.
Сложнее с водопроводным и канализационным стояком, если он располагается на кухне. Обычно стояки проходят в углу помещения, редко где-то в стороне. Закрыть их можно декоративными коробами, изготовленными из гипсокартона или фанеры, плит ДСП или ОСП. После чего сам короб декорируется под общий дизайн интерьера кухни. В конструкции обязательно оставляется дверца, через которую можно добраться до вентилей, счётчика учёта и ревизионного окошка на канализационном стояке.
Если в кухне устанавливается нагревательный бак проточного или накопительного типа, значит, к нему будут подводиться трубы системы водопровода. Бак обычно навешивается на определённой высоте, поэтому трубная подводка до него будет видна. В этой ситуации используются следующие способы декорирования:
- Если нагреватель установлен в системе кухонного гарнитура, вследствие чего заменяет собой один из навесных шкафчиков, то водопроводная труба будет проходить вертикально от столешницы до бака. Простой способ закрыть трубную проводку – установить на столешницу шкафчик такой же по дизайну, как и навесные или напольные шкафы с тем же фасадом. Открывая дверку, попадаете внутрь, где смонтированы трубы и запорные вентиля.
- Аналогичная ситуация и с гипсокартонным коробом, который собирается на металлический каркас. Гипсокартон впоследствии декорируется или под дизайн кухонного гарнитура, или под оформление фартука.
- Вместо гипсокартонных листов используют и другие плитные или панельные материалы, нередко б/у, что экономит средства на проведение ремонтных работ.
Декорирование вентиляционных труб
Кухонная вытяжка наряду с такими бытовыми приборами, как холодильник и варочная плита, стала неотъемлемым атрибутом пространства кухни. И если в помещении установлена её проточная модель, то, значит, от прибора до стены, сопряжённой с улицей, или до вентиляционной шахты расположен воздуховод. Он может быть круглой или прямоугольной формы, изготовлен из разных материалов, но это все равно труба, которую нужно спрятать. Есть несколько способов маскировки:
- Всё, о чём было написано в предыдущем разделе, приемлемо и здесь. Чаще всего для этого используют гипсокартонный короб.
- Если в качестве вытяжного воздуховода использовалась специальная пластиковая труба плоской прямоугольной формы, высота которой 5,5 сантиметра, то проблема решается сама собой. Такой вентиляционный воздуховод надо уложить прямо на верхние плоскости навесных шкафов кухонного гарнитура впритык к стене. Снизу он не будет виден.
Как спрятать трубы отопления
Задекорировать трубы отопления, идущие от стояка к радиатору, несложно. Вот только несколько интересных вариантов:
- Уложить их под напольную облицовку. Чаще коммуникации прокладывают по базовому полу, а затем заливают стяжкой.
- Прокладка проводится внутри напольного плинтуса, как это показано на фото ниже.
- Сооружается декоративный короб.
- Трубы замуровывают в стену, в связи с этим, на них делаются штробы.
Если нет возможности изменить расположение коммуникационной сети на кухне, то её элементы закрываются кухонным гарнитуром или фальш-стеной, которую собирают из гипсокартонных листов на металлический каркас. В этом случае важно учитывать, что для отопления надо будет использовать пластиковые трубы, срок эксплуатации которых дольше, чем у металлических. Мизерное отверстие, через которое вода начнёт подтекать, станет причиной полного разрушения гипсокартона.
Правильно скрыть стояк на кухне – значит, сделать его практически невидимым. Простой способ – закрыть его элементами кухонного гарнитура: нижними и верхними шкафами. Но часть трубы будет видна, а это расстояние между столешницей и навесным шкафчиком и от верхней плоскости настенного шкафа до потолка. Проще всего нижнюю часть покрасить в цвет фасадов мебели или фартука, верхнюю в тон стенам. Если сооружается фальш-стена, то стояк закроется её конструкцией.
Как скрыть газовую трубу
К сожалению, с газовой трубой проделывать какие-то манипуляции в плане перемещения или изменения расположения невозможно. Она проложена с учётом требований и правил газоснабжения. Редко газовые службы дают разрешение на перенос изделия. Самовольно переносить газовую трубу на кухне нельзя, это запрещено законом. Если вы взяли на себя все риски с переносом, то знайте, что штрафом не отделаетесь. Если газовики это обнаружат, то заставят привести всё в первоначальный вид. Поэтому придётся замаскировать трубу для газа или красиво отделать её.
Идей декорирования газовой трубы много. Дизайнеры используют её даже в практичных целях, например, создают рейлинг, на который вешают кухонную утварь. Здесь важно точно подобрать цветовое оформление приспособления, потому что он должен вписаться в дизайн интерьера кухни. На фото ниже один из таких вариантов показан. Обратите внимание, как дизайнеры точно подобрали акценты, связанные с металлической посудой. При этом даже матовая поверхность трубы не сильно отличается от блеска металлических поверхностей кухонной утвари и смесителя.
Но есть и совершенно оригинальные варианты, как украсить газовые трубы. Вот некоторые из них:
- Труба по участкам обмазывается клеем, затем на неё наматывают обычный шпагат. Получается что-то вроде ствола дерева. Затем к нему приклеивают листочки из пластика.
- Такой же вариант, только оформление производится красками. Весь ствол покрывается белой краской, затем мазками на него наносится чёрная краска. Получается ствол берёзы. Несколько пластиковых веточек или листочков дополняют дерево, делая его практически натуральным.
- Вся труба оклеивается бусинками или пуговицами разного размера. Включайте фантазию, подбирайте элементы декора по цвету и форме.
- Используется технология декупажа — разрисованные салфетки приклеиваются к трубе клеем ПВА. После высыхания вся композиция покрывается бесцветным лаком. Но учите, узоры на салфетках надо подбирать под дизайн кухни.
Как сделать гипсокартонный короб
Гипсокартонный короб – один из часто используемых вариантов, чтобы закрыть трубу в углу помещения.
В первую очередь сооружается каркас. Так как кухня – помещение влажное, то в ней лучше использовать для каркаса металлические профили, а не деревянные рейки.
- Замеряется высота потолков.
- Нарезаются три куска профиля по величине замера.
- На полу в углу чертится прямоугольник, внутри которого должна остаться труба. У прямоугольника две стороны – это стены помещения.
- Теперь три точки — это внешний угол прямоугольника и два стыка у стен, переносятся на потолок с помощью отвеса. На потолочной поверхности чертится такой же прямоугольник.
- По стенам спускаются линии, соединяющие точки верхней и нижней фигуры. К ним и устанавливаются профили, а затем крепятся саморезами.
- На полу и на потолке по внешним сторонам прямоугольников устанавливаются нарезанные под их размер профили. Первые крепятся к полу, вторые к потолку.
- Во внешний угол устанавливается третий длинный профиль, который крепится к коротким профилям, расположенным на потолке и на полу.
- Для усиления конструкции нарезаются поперечины, которыми соединяют между собой профили у стены и по внешнему углу каркаса.
- В конечном счёте, у вас должна получиться конструкция, изображённая на фото ниже.
- Теперь из гипсокартонного листа вырезаются полосы шириною, соответствующей плоскостям каркаса.
- Их укладывают по месту назначения и крепят к профилям саморезами, утапливая шляпки последних в тело ГКЛ на глубину 0,5 миллиметров. Расстояние между крепежами – 10-15 сантиметров, расстояние от края полосы до места крепления 1,5-2 сантиметра.
- Короб грунтуется и выравнивается шпаклёвкой.
- Затем шлифуется, снова грунтуется и покрывается краской или другим отделочным материалом.
- Не забываем оставлять дверцу, через которую проводятся ремонтные работы коммуникационных сетей.
Как видите, сделать короб для трубы из гипсокартона несложно. Неважно, располагается она в углу комнаты или под потолком, технология изготовления каркаса одинаковая, меняется только расположение конструкции.
Заключение по теме
Выбирая вариант декорирования труб на кухне, каждый должен понимать, что многое будет зависеть от выделенных на ремонт средств. Даже штора на окне станет отличным элементом скрытия трубных коммуникаций. Если самостоятельно замаскировать или декорировать трубы не получается, обратитесь за помощью к дизайнеру.
Сценарий оболочки
— Завершение анонимного канала при завершении «выходного» процесса
спросил
Изменено
2 года, 6 месяцев назад
Просмотрено
352 раза
Допустим, у меня есть что-то подобное в сценарии оболочки
command1 | команда2
Теперь, как я могу сделать так, чтобы команда2
завершалась, когда команда1
выходит?
Редактировать:
Обычно это происходит по умолчанию, когда
command2
пытается прочитать из стандартного ввода и замечает, что возвращает 0. У вас есть какой-нибудь конкретный пример, где это не делается?
Вот: эхо-тест | xmobar
И я думаю, что это можно использовать вместо xmobar
также
#!/bin/sh в то время как :; делать :; Выполнено
- оболочка-скрипт
- оболочка
- процесс
- труба
8
Этот комментарий объясняет, как программа завершается (или нет), когда другой конец канала закрывается:
Закрытие канала в
command1
command2
вообще ни о чем не говорит. Ничего не происходит, покаcommand2
не прочитает канал, не очистит его и не получит EOF. Даже в этом случае ему не нужно выходить, если у него есть еще работа. Аналогично, есликоманда2
выходит первой,команда1
не узнает об этом, пока не напишет в пайп, после чего получаетSIGPIPE
. Если он поймает это, он тоже сможет продолжить другую работу.
Вот что может произойти автоматически. Теперь ваш вопрос:
команда1 | команда2Как сделать так, чтобы
команда2
завершалась при выходе изкоманда1
[даже есликоманда2
не замечает или не хочет завершаться]?
Если ваша оболочка запускает конвейер в отдельной группе процессов, попробуйте уничтожить всю группу. Например. Bash делает это, когда включено управление заданиями ( set -m
). Он включен по умолчанию для интерактивных оболочек (в системах, которые его поддерживают), но не для сценариев.
Пример кода:
#!/bin/bash установить -м ( команда1; kill -s INT 0 ) | команда2
Весь конвейер запускается в отдельной группе процессов с PGID (идентификатором группы процессов), равным PID самой первой части, которая в данном случае является подоболочкой. kill 0
посылает сигнал своей группе процессов. Таким образом, мы сигнализируем command2
сразу после завершения command1
.
Примечания:
- В Bash
kill
является встроенным, поэтомуkill
в примере не является отдельным процессом с назначенными PID и PGID. Поэтому фраза «собственная группа процессов» выше не является строгой, это должна быть «группа процессов подоболочки». Это по-прежнему именно та группа процессов, которую мы хотим использовать.убить 9Можно использовать встроенный 0014 или
/bin/kill
, подойдет любой. -
command2
может изменить собственную группу процессов. Если это так, решение не будет работать. - Почти для всех сигналов
command2
может игнорировать сигнал или обрабатывать его практически любым способом. Выберите сигнал, который соответствует вашим потребностям. - Вызов
kill
сразу после завершенияcommand1
может быть слишком ранним. Это может привести к выходуcommand2
до того, как она прочитает и обработает все данные, сгенерированныекоманда1
; и вы можете захотеть, чтобы он обрабатывал все данные. В зависимости от того, как ведет себяcommand2
, может быть полезно задержатьkill
(например,sleep 2; kill …
). Обратите внимание, что (общего назначения) Linux не является операционной системой реального времени, поэтому любая фиксированная задержка может оказаться слишком короткой, если обстоятельства достаточно плохи.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
.
Читать, пока труба не будет закрыта
Трубопровод прост.
Вы усложняете себе задачу, прыгая в бассейн с самой глубокой стороны.
(Или, возможно, это вина вашего инструктора, что он не научил вас лучше.)
Чтобы привыкнуть к трубкам,
Я предлагаю вам написать две тривиально простые программы:
Тот, который просто записывает текст в стандартный вывод и завершает работу.
Это может быть что-то простое — «Быстрая коричневая лиса перепрыгивает через ленивую собаку»,
«Lorem ipsum dolor sit amet, consectetur adipiscing elit, …»,
короткая строка (может быть, даже один символ), повторяющаяся много раз —
все, что ты пожелаешь.
Использоватьprintf
,написать
,fprintf(stdout, …)
,
или любые другие функции, которые вам нравятся.Чтобы протестировать эту программу, просто запустите ее из командной строки.
Он должен отобразить выбранный текст и выйти (вернуть вас в командную строку).И тот, который просто читает текст со стандартного ввода
и записывает его в стандартный вывод.
Используйтеgetc
,gets
,read
или любые другие функции, которые вам нравятся.
Выйдите, когда вы получите конец файла.
Проверьте справочную страницу
для любой функции, которую вы используете
чтобы увидеть, как это указывает на конец файла.Чтобы протестировать эту программу, создайте текстовый файл
(что-то вродеjon_file.txt
) и поместите в него текст.
Вы можете сделать это быстро
говоря что-то вродеecho "Привет, мир" > jon_file.txt
,
или вы можете использовать редактор.
Затем введитеprog2 < jon_file.txt
.
Он должен отображать содержимое файла
и выйдите (вернитесь к командной строке).
Не называйте pipe
, dup
или что-то еще — даже open
или close
.
(Включите любой код отладки и/или аудита
вы хотите убедиться, что вы понимаете, что происходит, когда. )
Затем запустите prog1 | прог2
.
Если вы все сделали правильно, вы получите ожидаемый результат.
Теперь попробуйте «сломать» его, добавив в программы вызовов sleep
.
Если вы сломаете его, дайте мне знать, как вы это сделали.
Это должно быть почти невозможно —
если вы не заставите одну программу (или обе) спать
дольше, чем вы готовы сидеть и ждать,
вы всегда будете получать prog2
для вывода всех данных, которые записывает prog1
.
И если из приведенного выше примера непонятно:
наличие родителя и ребенка
(или, вообще, процессы по обе стороны трубы)
работать «одновременно» — это правильно. 1
Программа чтения не будет «прекращаться первой»
просто потому, что в канале нет данных на данный момент .
Как вы должны были понять из предыдущего упражнения,
если программа пытается читать из канала, в котором в данный момент нет данных,
системный вызов read
заставит программу ждать поступления данных.
Программа чтения не завершается
пока в трубе не останется данных
и больше не будет, всегда . 2
(на данный момент чтение
вернет конец файла.)
Указано условие «нет больше данных».
программой записи, закрывающей канал
(или выход, что эквивалентно,
потому что exit
вызывает close
для всех дескрипторов открытых файлов).
Я не понимаю, почему вы потеете над системным вызовом read
в этот момент
— хотя, если вы еще не умеете им пользоваться,
это подтверждает мое подозрение
что ваш преподаватель представляет материал не в логическом порядке.
(Я предполагаю, что вы имеете в виду читать системный вызов
, а не команду читать
.)
Единственный способ, которым ваша программа имеет смысл
если runcmd(pcmd->right)
это что-то, что читается со стандартного ввода
каким-либо методом (например, наша программа prog2
выше).
Похоже, ваша программа просто выполняет функцию оболочки —
настройка каналов, а затем запуск программ.
На этом уровне нет причин для вашей программы
(в той мере, в какой вы нам это показали)
выполнять любой ввод-вывод (чтение или запись).
__________
1 Связанное чтение: В каком порядке выполняются конвейерные команды?
2 Конечно, это упрощение.
Как вы скоро узнаете, если вы еще этого не сделали,
вы можете спроектировать программу чтения так, чтобы она заканчивалась
когда нет данных в канале в данный момент —
но это не поведение по умолчанию.
Или вы можете разработать программу чтения для завершения
при любом ряде других условий —
например, если он читает q
из канала.
Или он может быть убит сигналом и т. д.
Я оглядываюсь назад на этот ответ шесть месяцев спустя,
и я вижу, что я действительно не затронул весь вопрос;
Я покрыл вторую половину, но не первую.
Итак, продолжая вышеизложенное,
Измените первую программу, чтобы записать партии данных —
не менее 100 000 (10 5 )
или 102400 (2 10 × 10 2 ) символов — в стандартный вывод.
Кроме того, если вы еще этого не сделали,
измените его, чтобы записывать текущую информацию о состоянии в stderr.
Это может быть что-то очень простое;
например, один “.
” в stderr за каждые 1000 (или 1024) символов в stdout,
и «!\n
» в stderr, когда это будет сделано.Чтобы проверить это, запустите
prog1 > /dev/null
.
Если вы последовали моему предложению (выше),
вы должны увидеть 100 точек (.
), а затем!
и новая строка.
Если у вас нет звонков наsleep()
или другие трудоемкие функции вprog1
,
этот вывод должен прийти довольно быстро.Затем запустите
prog1 | туалет -с
.
Он должен отображать информацию о вашем состоянии stderr, как упоминалось выше,
за которым следует100000
или102400
или сколько байтов вы записали в стандартный вывод.
(Это будут выходные данныеwc -c
,
сообщает, сколько байт он прочитал из своего стандартного ввода (канала). )Изменить вторую программу на
сон
10 или 20 секунд
до того, как он начнет читать.Чтобы проверить это, запустите
prog2 < jon_file.txt
снова.
Очевидно, он должен сделать паузу на время
вы указали в своемsleep()
,
а затем отобразить содержимое файла и выйти
(вернуть вас в приглашение оболочки).
Теперь запустите prog1 | prog2 > /dev/null
.
Но, прежде чем вы это сделаете, вы можете попытаться угадать, что произойдет.
︙
︙
︙
Я ожидаю, что он напечатает несколько точек —
может быть, 8, может быть, 64 или 65, может быть, какое-то другое число —
потом пауза, потом остальные точки и !
.
Это потому, что prog1
может начать запись сразу,
даже если prog2
еще не читает.
Канал может хранить данные до тех пор, пока prog2
не будет готов начать чтение —
но только до определенного момента.
Канал имеет предел буферизации.
Это может быть 8000 (или 8192), 64000 (или 65536) или какое-то другое число.
Когда канал заполнится, система заставит prog1
ждать.
Когда prog2 начинает читать
, он сливает трубу;
это освобождает место для канала, чтобы хранить больше данных,
и так prog1
разрешено снова начать запись.
Если вы сначала не видите описанного выше поведения,
попробуйте увеличить числа: 200 000 байт, 30 секунд и т. д.
Так что ваш учитель был отчасти прав
когда он раскритиковал первый набросок вашей программы.
(Или, возможно, он был совершенно прав, а вы неправильно его процитировали.)
Как вы понимаете, та версия программы
дождался завершения программы runcmd(pcmd->left)
(программа записи канала),
а затем запустится runcmd(pcmd->right)
(считыватель трубок).
Но что, если левая программа выведет 100 000 байт?
Он заполнит трубу, а затем подождет, пока сможет написать еще немного.
Но больше написать не получится
пока «кто-то» не прочитает из канала и не истощит буфер хранения.