2013-11-16 3 views
1

Следующий код производит полный вывод strace. Почему бы не создать только первые 10 символов? Как я могу контролировать вывод strace в моем коде?изменить выход popen и распечатать его на языке c

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

ответ

2

strace печатает на stderr, в то время как popen смотрит только на stdout. Удаление оператора печати полностью приведет к выдаче вывода. Изменение strace echo hello на strace echo hello 2>&1 (см. this), кажется, устраняет проблему и вызывает только десять символов.

+0

спасибо ношение. Это работает. Я пропустил подробности stdout и stderr на странице man. – jdek

Смежные вопросы