Frage

Der folgende Code erzeugt die vollständige Strace-Ausgabe.Warum sollte es nicht nur die ersten 10 Zeichen produzieren?Wie kann ich die Ausgabe von strace in meinem Code steuern?

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

#define ARRL 250

void execute_ps(){
    int count=0;
    char p;
    FILE *fp;
    char cmd[ARRL];

    //insert system command
    sprintf(cmd, "strace echo hello");
    //open channel to see output of command executed
    fp = popen(cmd,"r");
    if(fp==NULL){printf("popen err:%s\n",strerror(errno));exit(1);}
    while((p=fgetc(fp))!=EOF){
        printf("%c",p);
        if (count==10){break;}
        count++;
    }

pclose(fp);
}


int main(int argc, char **argv)
{
    execute_ps();
    exit(0);
}
War es hilfreich?

Lösung

strace druckt nach stderr, während popen schaut nur zu stdout.Wenn Sie die print Anweisung vollständig entfernen, wird weiterhin eine Ausgabe erzeugt.Verändernden strace echo hello zu strace echo hello 2>&1 (sehen dieser) scheint das Problem zu beheben und führt dazu, dass nur zehn Zeichen produziert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top