Автор оригинала: Duc Duy Bui.
Мы успешно бегаем код, увидели результат с очень мало понять. Это действительно лучше, чем писать много кода, увидев сотни ошибок и отказаться от изучения новых технологий.
Этот пост фокусируется на том, как понять предыдущий код:
труба (FD);
Мы можем прочитать страницу человека или учебную страницу о трубе. Например, https://man7.org/linux/man-pages/man2/pipe.2.html
Труба () создает трубу, однонаправленный канал данных, который может быть использован для интерпретирования связи. Это означает, что это:
- Канал данных
- Коммуникация по интерфейсам: родительский процесс отправляет в детский процесс/дочерний процесс, получает родительский процесс или дочерний процесс, отправляет на родительский процесс/родительский процесс получает от детей.
Рисуя картину, мы узнаем, что дочерний процесс/родитель может писать или читать с трубы. Мы можем представить, что у трубы есть два конца: один для «напиши» или один для «чтения». (На самом деле, когда вызывается вилка, переменная дублирована)
Следующий вопрос приходит: как мы знаем, какой конец читается, какой из них написан. Мы продолжаем читать, что выше ссылки:
PipeFD [0] относится к чтению трубы. PipeFD [1] относится к концу записи трубы
Итак, если мы хотим писать в трубу, TipeFD [1] используется. Если мы хотим читать с трубы, используется TipeFD [0].
Все идет нормально. Настало время проверить. В чем проблема, если только родитель и ребенок используют только для чтения? Мы редактируем код и тест:
Если (ChattPid) {//закрывается (FD [0]); Написать (FD [0], строка (стрин (строка) +1)); Выход (0); } else {//закрывается (FD [1]);
nbytes = read(fd[0], readbuffer, sizeof(readbuffer)); printf("Received string: %s", readbuffer);
} Беги и посмотрите результат:
О, программа работает навсегда. Теперь продолжайте читать:
Если процесс пытается прочитать из пустой трубы, то прочитайте (2) заблокируют, пока данные не будут доступны.
В вышеуказанном модифицированном коде родитель ждет навсегда читать из трубы (без данных).
Поздравляю! Мы можем прочитать очень сложную страницу человека, запустив простую программу.
Следующий пост: другие проблемы могут быть обнаружены этим простым кодом.
Спасибо за чтение!
Оригинал: «https://www.codementor.io/@duydb0181/see-it-run-understand-later-2-1i95oqxqma»