Хорошо, я сам нашел ответ...
на самом деле намного проще в php, чем без него...
правда, мне потребовалось много часов, чтобы закончить ^^
#load the file as simplexml object and then switch into system
#https://www.w3schools.com/php/func_simplexml_load_file.asp
$xml=simplexml_load_file('./myfile') or die("Error: Cannot create object");
$xml=$xml->system
#put the whole string(s) into a variable, getname gets the name of the object itself if it exists
#https://www.w3schools.com/php/func_simplexml_getname.asp
$output='type='. $xml -> type -> static -> getName(). $xml -> type -> {'dhcp-client'} -> getName(). "\nip-address=". $xml -> {'ip-address'}. "\ndefault-gateway=". $xml -> {'default-gateway'}. "\nnetmask=". $xml -> netmask;
#write the output into a file
#https://www.w3schools.com/php/func_filesystem_file_put_contents.asp
file_put_contents('./myoutputfile', $output );
это дало мне следующий вывод для первого фрагмента (последние три строки в порядке, если они не дают значения, в противном случае я мог бы сначала проверить, существуют ли они):
type=dhcp-client
ip-address=
default-gateway=
netmask=
и этот вывод для второго фрагмента:
type=static
ip-address=192.168.0.2
default-gateway=192.168.0.1
netmask=255.255.255.0
Спасибо всем за помощь:)
Нет EOF для отправки или получения.
EOF — это просто фикция API, существующая только в библиотеке stdio. Это флаг состояния входного потока FILE*
stdio, который обычно устанавливается после возврата 0
системного вызова read(2)
базового файлового дескриптора. И макрос для -1
, который является значением, возвращаемым fgetc(3)
и подобными функциями при вызове входного потока с включенным флагом EOF.
Хотя вы можете метафорически говорить об «отправке EOF» как о «косвенно заставит некоторое будущее read(2)
вернуться 0
», это довольно небрежно и создаст ложное впечатление, что EOF является своего рода встроенным сигналом или состояние базового файлового дескриптора или устройства, которое можно установить с другого конца.
В канале read(2)
вернет 0
, если
Оба условия являются временными , что согласуется с тем, как условия EOF являются временными для обычных файлов или терминалов.
В частности, обратите внимание, что в Linux все каналы фактически именуются каналами :, пока процесс все еще имеет открытый дескриптор чтения конца канала, вы также можете восстановить его запись конца, открыв канал в режиме записи через /proc/<pid>/fd/<fd>
. Хотя это может быть не так просто в других системах, наличие липкого EOF на «анонимном» канале не является частью его интерфейса.