В библиотеке Core есть функция Linux_ext.get_ipv4_address_for_interface
, которая возвращает IP-адрес, назначенный определенному сетевому интерфейсу. Есть ли простой способ сделать то же самое, используя только стандартную библиотеку и не делая fork
для чтения содержимого ifconfig
или ip addr show
?Получить IP-адрес для определенного интерфейса в OCaml
ответ
В абстрактной машине OCaml не содержится понятия сетевого интерфейса, поэтому реализовать такое поведение с помощью переносной части стандартной библиотеки OCaml невозможно, не полагаясь на интерфейсы, специфичные для ОС.
На самом деле это невозможно даже в C. Поскольку интерфейс специфичен для ядра, поэтому для написания такой функции вам потребуется написать отдельную реализацию для каждой системы Unix, которую вы планируете настраивать. For example, в C вам нужно будет использовать интерфейс ioctl
и использовать операции с конкретным ядром Linux.
Хорошей новостью является то, что вы все еще можете сделать это с помощью OCaml. Хотя OCaml не предоставляет функцию ioctl
, вы все равно можете позвонить через либо через внешний интерфейс функции C Types, либо напрямую, по writing a stub function.
Извините, вместо «Pervasive» я имел в виду все модули стандартной библиотеки : нет внешней библиотеки. Я редактирую свой вопрос. Спасибо за Ваш ответ –
(Я думаю, что быстрый ответ - нет. Базовый язык OCaml не имеет такого низкоуровневого сетевого API.) –