2016-01-22 55 views
-2

我需要在C運行這個shell命令++腳本:系統()執行shell命令不同的C++

「在/ usr/local/bin目錄/ mjpg_streamer -i」 在/ usr/local/lib目錄/ input_uvc。因此 「-o 」/usr/local/lib/output_http.so -w的/ usr /本地/ www「 的-b」

此命令將啓動該廣播的視頻饋送的應用程序。當我通過C++中的system()執行此命令時,應用程序無法正常啓動。

我用:

system("/usr/local/bin/mjpg_streamer -i \"/usr/local/lib/input_uvc.so\" -o \"/usr/local/lib/output_http.so –w /usr/local/www\" -b"); 

當我嘗試訪問視頻流之後,我與C++應用程序啓動它的網頁回報:

501:未實現!

沒有WWW的文件夾中配置

我不能指望你們給我的應用程序相關的解決方案,但我想知道如果有一個在路上的不同使用系統從C++應用程序的命令( )和直接輸入到終端的命令被執行。

編輯:該應用程序廣播IP上的視頻流:8080。我通過瀏覽器中的IP訪問它。通常它會打開一個包含流的網頁,但是當我使用C++應用程序執行命令時,會出現該錯誤。

+2

「試圖訪問視頻流」是什麼意思?你能否請嘗試創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)並向我們展示? –

回答

2

編輯:錯誤報價的舊想法是錯誤的;我認識到,-w實際上是一個選項output_http.so,所以整個事情必須作爲一個參數傳遞給-o選項傳遞,如圖herehere

在這種情況下,檢查文件權限等是否在/ usr /本地/ www存在?是否有可能從根shell運行shell命令?


嘿,我也有書推薦, "one of the best tech books ever published"Stevens' Advanced Programming in the Unix Environment。那個人知道 - 對不起:知道 - 他在說什麼。

+0

您建議使用什麼引號?我只是跟着一個教程,他們說我應該使用這個命令。 – Jancoz

+0

仍然使用命令獲取相同的錯誤。 – Jancoz

+0

嗯。該目錄是否存在,您是否有寫入權限等?你可以使用'ps -f'等來檢查正在運行的進程和它們的命令行參數(我總是試着爲'ps'命令獲得正確的選項組合,或許會拋出一個'-e'或'aux '或者其他)。拖纜是否有調試/詳細選項? –

1

我會避免使用system(3)庫函數,或者至少檢查其返回的錯誤代碼。我不明白你爲什麼在你的命令中使用"(我相信在你的情況下,你不需要它們;但是一般要小心code injection!)。閱讀關於globbing

您可以使用popen(3)至少獲取該命令的輸出。

更妙的是,使用fork(2) & execve(2) & waitpid(2)syscalls(2)編寫自己mjpg_streamer程序的運行(也許pipe(2)poll(2)dup2(2)等)。閱讀Advanced Lnux Programming瞭解更多信息。