как создать канал, разветвляющий два процесса

  • Для ответа на вопрос обработки конкретной строки -:

    Вы можете использовать sedдля вставки строк перед строкой в ​​середине файл для вашего варианта использования.

    Таким образом, предположим, что ваш файл:

    подсеть 97.129.0.0 маска подсети 255.255.240.0 { запретить неизвестным -клиентам; диапазон 97.129.2.2 97.129.2.254; группа { имя файла "3M -1M -OKS2016NOV.cm"; хост-клиент1 { аппаратный Ethernet 00 :04 :0d :0c :0f :0a; } хост-клиент2 { аппаратный ethernet a0 :be :cd :ea :1d :14; } ####}}

    Можно:

    сэд -я '/ ####/ я \ \thost client _i _хочу _в _вставить {\n\thardware ethernet e3 :ee :ed :ea :1d :e4;\n\ t}\n' /etc/dhcp/dhcpd.conf


  • Однако в прошлом я также управлял парой кабельных модемов интернет-провайдера (I четко распознать эту строку filename "3M-1M-OKS2016NOV.cm";как предоставление файла конфигурации кабельного модема ).

    У меня есть несколько рекомендаций, которые нужно добавить:

    - Having a host definition spanning several lines is not practical. Over time the DHCP file will become unwieldy. For scripting it is
    

    сложнее, как для вставки, так и для удаления строк. рекомендую делая это только в одной строке, как:

           host client2 { hardware ethernet a0:be:cd:ea:1d:14; }
    
    - The names of hostnames also have to be unique. Either you increment them, or use your customer code *if* a numeric code.
    - an alternative, when incrementing the host part, is putting a comment with the customer code *after* the host definition. As an
    

    добавлен бонус, проще работать с файлом, если нужно сделайте это вручную, чтобы исправить ошибку инициализации, или быстро вмешательство.

           host client2 { hardware ethernet a0:be:cd:ea:1d:14; } #_cus234XP_
    

    Таким образом, при удалении клиентакак вы имеете дело с один вкладыш -, вам просто нужен один вкладыш grep -vили sed.

    Кроме того, ISC DHCP также позволяет вам includeфайлы. За то, что не пришлось вставьте строки в середину файла конфигурации, вы можете сделать:

       subnet 97.129.0.0 netmask 255.255.240.0 {
           deny unknown-clients;
           range 97.129.2.2 97.129.2.254;
           group {
                   filename "3M-1M-OKS2016NOV.cm";
                   include "customers";
           }}
    

    Затем файл клиентов должен выглядеть примерно так:

       host client1 { hardware ethernet 00:04:0d:0c:0f:0a; } #_cus234XP_
       host client2 { hardware ethernet a0:be:cd:ea:1d:14; } #_cus235XZ_
    

    Итак, вам просто нужно добавить новых CM/клиентов в конец файл, и не нужно иметь дело с sed/awk, хотя бы для добавления новых клиенты.


    Кроме того, я бы посоветовал рассмотреть другие возможные решения для реализация настройки DHCP для модемов/клиентов CM.

    Раньше я писал программное обеспечение для работы с ISC DHCP. текстовые файлы, в течение нескольких лет. Существуют некоторые ограничения для процесс:

    - Each time a new item is removed/inserted, the service has to be restarted;  
    - If by chance you duplicate an host, the service won't restart;
    - Any kind of parsing has to be done in text mode, or done in ancillary/duplicate methods;
    - If some auxiliary housekeeping is done by hand, it is prone to errors. 
    

    Затем я обнаружил docsis_server, который представляет собой «взломанный» ISC DHCP поверх MySQL для Linux, специально разработанный как промежуточное программное обеспечение с открытым исходным кодом для кабельной индустрии. В итоге я написал свое программное обеспечение/веб-интерфейс поверх него. Это было благом, когда речь шла непосредственно о запросах MySQL, а не о текстовых файлах, для взаимодействия со службой DHCP.

    К сожалению, проект больше не поддерживается.https://github.com/bschirrmeister/docsis_server

    В настоящее время у вас также есть проект Kea от ISC для DHCP, на который стоит обратить внимание. Кажется очень интересным разработать поверх него схемы обеспечения.https://kea.isc.org

    Kea is an open source software system including DHCPv4, DHCPv6 servers, Dynamic DNS daemon, REST API interface, MySQL, PostgreSQL and Cassandra databases, RADIUS and NETCONF interfaces and related utilities.

    Наконец, обычно сеть управления кабельным модемом представляет собой пространство частных IP-адресов в диапазоне 10.x.x.x; здесь нет смысла давать общедоступные IP-адреса кабельным модемам, таким как 97.129.2.x, которые вы используете.

    П.С. Насколько я знаю, решение для инициализации, которое я написал поверх docsis_server, работает уже 10 лет.

0
05.03.2021, 11:33
1 ответ

Чтение (man )about pipe (int pipefd[2] )syscall -возвращает два файловых дескриптора -один для чтения и один для записи. Затем разветвите два процесса -, вы все еще находитесь в одном и том же (разветвленном процессе -, поэтому вы видите возвращаемый массив pipefd[].

Далее, если вы хотите эмулировать канал в оболочке, вы должны

В 1-м процессе:

  • закрыть файловый дескриптор 1 (стандартный вывод)
  • dup ()чтение файлового дескриптора, полученного из канала()-теперь также fd=1 (stdout)
  • руководитель кто

Во 2-м процессе:

  • закрыть файловый дескриптор 0 (стандартный ввод)
  • dup ()запись файлового дескриптора, полученного из канала()-теперь также fd=0 (stdin)
  • исполнительный туалет
0
18.03.2021, 22:27

Теги

Похожие вопросы