【C/C++】system関数とCurlでグローバルIPを取得する

LinuxMacで自機のIPアドレスを取得する場合、
curlコマンドでinet-ip.infoを叩くとグローバルIPアドレスを取得できます。

$ curl inet-ip.info
  123.456.234.321

 

Cのプログラムからはsystem関数でcurlコマンドを実行可能ですが、
phpのexecの様に関数の戻り値としてIPアドレスが返らないため、
一旦ファイルに出力して、それを読み込む方法がお手軽です。

system("curl inet-ip.info > ipAddr.txt");
$ cat ipAddr.txt
123.456.234.321 

 

あとは上記テキストをfopen等で読み込めばOKですが、
curlコマンドは進捗状況を標準出力に出力するため、プログラム実行時に下記のような進捗がターミナルに表示されてしまいます。

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 14 100 14 0 0 384 0 --:--:-- --:--:-- --:--:-- 388


curlコマンド実行時にサイレントモード(-s)を指定することで
進捗を標準出力に出力せずにコマンドを実行できます。

system("curl -s inet-ip.info > ipAddr.txt");