Использование popen () для вызова команды оболочки?

При запуске следующего кода через xcode я получаю непоследовательное поведение. Иногда он корректно печатает версию git, в других случаях она ничего не печатает. Код возврата из команды оболочки всегда равен 0. Любые идеи о том, почему это может быть? Что я делаю неправильно?

#define BUFFER_SIZE 256 int main (int argc, const char * argv[]) { FILE *fpipe; char *command="/opt/local/bin/git --version"; char line[BUFFER_SIZE]; if ( !(fpipe = (FILE*)popen(command, "r")) ) { // If fpipe is NULL perror("Problems with pipe"); exit(1); } while ( fgets( line, sizeof(char) * BUFFER_SIZE, fpipe)) { // Inconsistent (happens sometimes) printf("READING LINE"); printf("%s", line); } int status = pclose(fpipe); if (status != 0) { // Never happens printf("Strange error code: %d", status); } return 0; } 

Это звучит подозрительно, как если бы выход был буферизирован, подумал ли вы о том, чтобы промыть выходной буфер … use fflush fflush() чтобы сделать это. См. Здесь дополнительную информацию.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Я думаю, что нашел источник странного поведения. Кажется, что Xcode делает что-то напуганное во встроенном окне терминала, что приводит к тому, что я не вижу выход. Если я попытаюсь запустить код непосредственно в стандартном окне терминала, это поведение не появится, и текст будет последовательно распечатан.