![](/img/trans.png)
[英]How to return a lambda function containing a function capture? (C++)
[英]How to capture ping's return value in C++
有誰知道,如何在c ++中捕獲ping的返回值? 根據此鏈接 :ping應成功返回0
,失敗時返回1
,例如未知主機,非法數據包大小等2
在無法訪問的主機或網絡上。
在C ++中,我使用system ()
調用了ping,例如int ret = system("ping 192.168.1.5");
。
我的問題是, ret
的值是0
或1
。 永遠不會2
! 如果我認為正確,這是因為,我得到的這個返回值是系統函數的返回值,而不是ping的。 那么我怎么能得到ping的回報呢?
提前致謝!
kampi
編輯:現在我使用這個系統(“ping 192.169.1.5> ping_res.txt”); 但我不想使用文件(打開,並閱讀它們),這就是為什么我要捕獲,返回值,如果可能的話:)
如果您使用的是Windows,最好直接使用IcmpSendEcho2在應用程序中實現ping功能。
一個簡單的解決方案是將ping的輸出傳遞給文件並讀取它。
例如
system("ping 192.169.1.5 > ping_res.txt");
並閱讀ping_res.txt
以獲取所需的信息。
從Linux上的man 3 system
:
返回值
錯誤時返回的值為-1(例如fork(2)失敗),否則返回命令的返回狀態。 后一種返回狀態采用wait(2)中指定的格式。
然后從man 2 wait
Linux:
如果status不是NULL,則wait()和waitpid()將狀態信息存儲在它指向的int中。 可以使用以下宏檢查此整數(將整數本身作為參數,而不是指向它的指針,就像在wait()和wait-pid()中一樣!):
WIFEXITED(狀態)
如果子節點正常終止,即通過調用exit(3)或_exit(2),或從main()返回,則返回true。WEXITSTATUS(狀態)
返回子項的退出狀態。 這包括子項在exit(3)或_exit(2)的調用中指定的status參數的最低有效8位,或者作為main()中return語句的參數。 僅當WIFEXITED返回true時才應使用此宏。
來自Linux上的sys / wait.h:
# define WEXITSTATUS(status) __WEXITSTATUS(__WAIT_INT(status))
來自Linux上的bits / waitstatus.h:
/* If WIFEXITED(STATUS), the low-order 8 bits of the status. */ #define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
換句話說,如果您使用的是Linux,那么您將會使用這些宏。 您使用的是HP-UX嗎? 我注意到您鏈接到HP-UX的信息。 如果是這樣,你的man 3 system
頁面會說什么?
另外,請記住system
調用“sh -c command ”,您將收到sh的返回值:
退出狀態
應返回以下退出值:
0要執行的腳本僅包含零個或多個空行或注釋,或兩者都包含。
1-125非交互式shell檢測到語法,重定向或變量賦值錯誤。
127非交互式shell無法找到指定的command_file。
否則,shell應返回它調用或嘗試調用的最后一個命令的退出狀態(另請參見特殊內置實用程序中的退出實用程序)。
如果你嘗試,你會發現什么回報值,例如, system("exit 203");
?
所以你只想知道返回值:即“ 0成功,1失敗,如未知主機,非法數據包大小等等,2在無法訪問的主機或網絡上。 ”我認為在這種情況下使用ping是一種過度殺傷力。 寫入文件並從中讀取顯然有點難看。
我想你應該嘗試**打開()連接到端口7(Echo)上的主機。 然后你會得到ping返回值告訴你的信息。 如果您還想獲得響應持續時間,可以通過在echo端口上向主機發送任意數據來自行測量。 編寫代碼需要一些時間,但我認為它的靈活性和准確性是值得的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.