最早用了一種方法, , cmd.exe /c 命令 , 結合 單管道重定向輸出資訊來dos命令輸出結果, 但這種方法在命令比較複雜(夾雜多個空格, 雙引號) 的情況 會導致cmd.exe無法正確解析出要執行的命令, 出現命令傳遞錯誤, 執行失敗. 命令格式參見幫助:dos下執行 cmd /?
之後用雙管道, 重定向命令輸入和命令結果輸出, 把命令通過輸入管道寫入cmd.exe程序並執行, 通過輸出管道獲取執行結果.
需要注意幾個點:
dos命令呼叫的大部分外部元件的輸出為ansi字符集, 設定cmd.exe的字符集為ansi(預設), 統一 一種字符集便於解析
寫入管道的命令結尾要增加」\r\n」 才能讓cmd.exe執行
因為這是模擬開啟乙個cmd.exe輸入命令, 所以必要時 需要增加 「& exit」 , 來關閉cmd程序
遇到的問題:
讀管道沒獲取到寫入的命令和結果
解決: 因為少了換行符」\r\n」
讀取到more? 等字樣
解決:
1. 寫入的命令需要為多位元組編碼
2. writefile時指定的寫入資料長度大於實際的資料長度, 導致cmd.exe還在等待剩餘資料的輸入
linux 執行命令列,獲取結果
char strcmd 256 snprintf strcmd,sizeof strcmd 1,ls l s m logpath file pf popen strcmd,r if null pf char str 1024 int count fread str,1,sizeof str 1,pf...
命令列方式獲取mysql sql的執行結果小結
最近空了,簡單整理下命令列下獲取mysql結果的幾個方式方法 一 mysqladmin方式,貌似不能執行sql,但是可以建庫,刪庫等操作 mysqladmin uroot p status mysqladmin uroot p extended status 等等二 mysql方式 1 使用引數 e...
C語言執行cmd命令並獲取執行結果
優點 跨平台 缺點 windows下呼叫時會閃出控制台視窗 include include brief 使用popen呼叫終端並獲取執行結果 param in cmd 命令內容 param out result 儲存結果的位址 return 0或1 執行狀態,失敗或成功 int exec cmd c...