обнаружить поток вывода на сценарии оболочки Linux - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь написать сценарий оболочки на linux, чтобы обнаружить строку на выходе steam.

Это мой сценарий оболочки

#!/bin/bash
./binary

Двоичный файл скомпилирован из исходного файла, как показано ниже:

gcc-4.6 main.c -o binary 

//main.c
#include "stdio.h"
void main(){
    int i;
    for (i=0; i<100; i++){
       printf("data: %d\n", i);
       sleep(1);  // delay 1s
    }
}

Не могли бы вы дать мне знать, как обнаружить «данные: 10» из вывода ./binary?

1 Ответ

0 голосов
/ 15 ноября 2018

Когда stdout не подключен к терминалу, он по умолчанию полностью буферизован. Поэтому, если вы хотите иметь возможность немедленно обнаруживать вывод (как указано в sleep(1); в коде), вам необходимо очистить буфер после печати. ​​

#include "stdio.h"
void main(){
    int i;
    for (i=0; i<100; i++){
        printf("data: %d\n", i);
        fflush(stdout);
        sleep(1);  // delay 1s
    }
}

Затем вы можете направить вывод программы к чему-либо в сценарии, и он обнаружит вывод, не дожидаясь завершения программы.

...