linux-Befehl ausführen, indem Sie popen auf C-code

Habe ich den code unten, dass ich finden den thread auf hier zu verwenden, die popen Funktion

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;
}

It-Ausgänge:

21 Apr 03:03:03 ntpdate[4393]: no server can be used, exiting
buffer is:

warum printf keine Ausgabe etwas? Wenn ich ls als Befehl, dann printf Ausgänge der ls-Ausgang. was mache ich falsch ntpdate ausführen?

Wenn ich den code auszuführen unten (bezogen auf die Webseite)

#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;
}

Bekomme ich

21 Apr 03:15:45 ntpdate[5334]: no servers can be used, exiting
-�2}�����"|�4#|�-
 Error: Failed to close command stream 

welche Unrecht auf die codes oben?

  • Wenn wir das tun ntpdate 2>/dev/null können wir sehen, dass es mit stderr so müssen Sie umleiten stderr zu sehen-Ausgang
InformationsquelleAutor sven | 2013-04-21
Schreibe einen Kommentar