出力は stderr に行くので stderr をリダイレクトする必要があります そのように:
FILE* file = popen("ntpdate 2>&1", "r");
これは stderr をリダイレクトします stdout まで したがって、両方からの出力が表示されます。第二号 fscanf 最初のスペースで停止するので、 fgets に置き換えることができます :
fgets(buffer, 100, file);
Shafik Yaghmour が正しく診断したように、ntpdate からの出力は 標準エラーに (正しく) 書き込まれます。これは、プログラムの標準エラーと同じです。
パイプを介して送信されるエラー メッセージを取得するには、次を使用します。
FILE *file = popen("ntpdate 2>&1", "r");
ntpdate からの標準エラー出力を送信します 読み取り元のパイプであるコマンドの標準出力に。
もちろん、 ntpdate を使用しているように見えます 何かを構成するまでは、うまく機能しません。