2014-09-19 25 views
0

我在理解system()命令在Ubuntu上的運行方式時遇到了一些問題。通過Ubuntu上的C++系統()將輸出與SIPp遠程命令混淆

我正在創建一個C++程序來遠程控制SIPp客戶端(SIPp remotely controlling clients),並且已經完成了該程序,但是現在我正在測試它時遇到了一個問題。

我已經在我的centOS虛擬機上測試過了,它運行的很好,但現在我在Ubuntu VM上測試它,甚至無法執行這些命令。

在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和西普客戶臨危並執行任務,但在Ubuntu上它給我的目錄不存在的錯誤。

從我所看到的,它目前正試圖讀取>當我試圖輸出一個文件,但用\>轉義>只會產生一個編譯器錯誤。

warning: unknown escape sequence: '\>' [enabled by default] 
system("echo + \>"); 
     ^

如果任何人都可以指出我正確的方向,我會成爲一個快樂的露營者。

回答

1

因此,經過四處搜索,我意識到這是因爲訪問/ dev/udp是bash only函數,而system()被bin/sh解釋。

更改我的系統()調用system("bash -c \"echo + >/dev/udp/localhost/8888\"");解決了問題。