ändern Sie die Popen-Ausgabe und drucken Sie sie in C-Sprache
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);
}
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