Karena hasilnya akan menjadi stderr
Anda perlu mengarahkan ulang stderr
seperti itu:
FILE* file = popen("ntpdate 2>&1", "r");
ini akan mengalihkan stderr
ke stdout
dan Anda akan melihat output dari keduanya. Edisi kedua fscanf
akan berhenti di spasi pertama sehingga Anda dapat mengganti dengan fgets
:
fgets(buffer, 100, file);
Saat Shafik Yaghmour mendiagnosis dengan benar, keluaran yang Anda lihat dari ntpdate
ditulis (dengan benar) ke kesalahan standarnya, yang sama dengan kesalahan standar program Anda.
Untuk mendapatkan pesan kesalahan yang dikirim ke pipa, gunakan:
FILE *file = popen("ntpdate 2>&1", "r");
Itu mengirimkan keluaran kesalahan standar dari ntpdate
ke output standar dari perintah, yang merupakan sumber pipa tempat Anda membaca.
Tentu saja, sepertinya menggunakan ntpdate
tidak akan berfungsi dengan baik sampai Anda mengonfigurasi sesuatu.