Tôi có đoạn code dưới đây mà tôi tham khảo các chủ đề trên here sử dụng popen
chức nănglệnh linux thực hiện bởi popen trên mã C
int main(int argc,char *argv[]){
FILE* file = popen("ntpdate", "r");
char buffer[100];
fscanf(file, "%100s", buffer);
pclose(file);
printf("buffer is :%s\n", buffer);
return 0;
}
Nó ra:
21 Apr 03:03:03 ntpdate[4393]: no server can be used, exiting
buffer is:
tại sao printf
không đầu ra có gì không? Nếu tôi sử dụng ls
làm lệnh, khi đó printf sẽ xuất kết quả đầu ra ls. Tôi đang làm gì sai khi thực hiện?
Nếu tôi thực thi mã dưới đây (ám chỉ các webpage)
#define COMMAND_LEN 8
#define DATA_SIZE 512
int main(int argc,char *argv[]){
FILE *pf;
char command[COMMAND_LEN];
char data[DATA_SIZE];
// Execute a process listing
sprintf(command, "ntpdate");
// Setup our pipe for reading and execute our command.
pf = popen(command,"r");
if(!pf){
fprintf(stderr, "Could not open pipe for output.\n");
return;
}
// Grab data from process execution
fgets(data, DATA_SIZE , pf);
// Print grabbed data to the screen.
fprintf(stdout, "-%s-\n",data);
if (pclose(pf) != 0)
fprintf(stderr," Error: Failed to close command stream \n");
return 0;
}
tôi nhận được
21 Apr 03:15:45 ntpdate[5334]: no servers can be used, exiting
-�2}�����"|�4#|�-
Error: Failed to close command stream
là gì sai lầm trên các mã trên?
Nếu chúng ta làm 'ntpdate 2>/dev/null' chúng ta có thể thấy rằng nó được sử dụng' stderr' vì vậy bạn cần để chuyển hướng 'stderr' để xem đầu ra –