периодическое чтение с iPhone stderr - PullRequest
0 голосов
/ 30 января 2010

Я работаю над классом, который буду использовать для своих собственных целей отладки. Я предполагаю, что это будет версия устройства консоли отладчика. В основном я забочусь о захвате операторов NSLog (). Независимо от того, что я вхожу в консоль, я получаю только 0xFF от fgetc(). От fgetc() я ожидаю увидеть символ, который был отправлен на stderr с момента последнего вызова update. Ниже подкласс UITextView:

stdErrFP определяется в заголовке как: FILE* stdErrFP;

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
       stdErrFP = fdopen (fileno (stderr) , "w");
       if (!stdErrFP)
           NSLog(@"errno - %s", strerror(errno));

       [self update];
       [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(makeSomeNoise) userInfo:nil repeats:YES];
       [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(update) userInfo:nil repeats:YES];
    }
    return self;
}

-(void) update{
 char errBuff[2] = {0x00, '\0'};
 do{
  errBuff[0] = fgetc(stdErrFP);
  self.text = [NSString stringWithFormat:@"%@%@", self.text,  [NSString stringWithCString:errBuff]];
 }while (errBuff[0] != EOF); 
}

-(void) makeSomeNoise{
 CFShow([NSString stringWithString:@"noisy CFFunction"]);
 NSLog(@"noisy NSLog");
 char message[] = "noisy fprintf";
 fprintf(stderr, message);
}

-(void)makeSomeNoise имеет так много разных типов журналов, потому что Эрик Садун писал, что NSLog не регистрирует в stderr , поэтому я хотел исключить это как возможность. Я не уверен, связано ли это с моей проблемой, но я заметил, что fdopen() всегда терпит неудачу, если только флаг не равен "w", это не может быть правильным.

ОБНОВЛЕНИЕ: для fdopen() Я был не прав, дело не в том, что работает только "w", а в том, что только "r" НЕ работает. (т. е. оба «а» и «ш» работают). Ошибка, когда я использую «r»: No such file or directory. Похоже, я неправильно подключаюсь к stderr. StackOverflow Genius, пожалуйста, помогите.

1 Ответ

0 голосов
/ 16 июля 2010

Насколько я могу кодировать, вы не можете читать из stderr. Буфер stderr похож на пожарный шланг, попытка получить что-либо значимое очень зависит от времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...