У меня проблемы с пониманием того, как работает система() на Ubuntu.
Я создаю программу C++ для удаленного управления клиентами SIPp (удаленное управление клиентами SIPp) и в значительной степени завершил эту программу, но теперь у меня возникает проблема, когда я ее тестирую.
Я уже тестировал это на своей виртуальной машине centOS, и он работал отлично, но теперь, когда я тестирую его на своей виртуальной машине Ubuntu, он даже не выполняет команды.
На терминале Ubuntu я могу запустить echo + >/dev/udp/127.0.0.1/8888
и клиент SIPp примет команду. Однако, когда я запускаю свою программу (что делает то же самое), я получаю sh: 1: cannot create/dev/udp/127.0.0.1/8888: Directory nonexistent
.
#include <stdlib.h>
int main(){
system("echo + >/dev/udp/127.0.0.1/8888");
return 0;//
}
Вышеприведенный код отлично работает на centOS, и клиент SIPp получает и выполняет задачу, но на Ubuntu он дает мне несуществующую ошибку Directory.
Из того, что я вижу, он в настоящее время пытается прочитать> как я пытаюсь вывести файл, но экранирование> с \> просто вызывает ошибку компилятора.
warning: unknown escape sequence: '\>' [enabled by default]
system("echo + \>");
^
Если кто-то может указать мне в правильном направлении, я бы был одним счастливым туристом.
Поэтому после поиска навсегда я понял, что это связано с тем, что доступ к /dev/udp был только функцией bash, а system() интерпретировался bin/sh.
Изменение моего системного() вызова system("bash -c \"echo + >/dev/udp/localhost/8888\"");
решил проблему.
Имел подобную проблему и нашел другое решение, я должен был сделать это в bashscript, и ubuntu бросил ту же ошибку. Это сработало для меня:
echo "+" | nc -4u -w1 127.0.0.1 8888
Получил это отсюда: http://mikeberggren.com/post/53883822425/ncudp