C ++ ifstream do linux para o arduino

código original

#include<iostream>
#include<fstream>
using namespace std;

int main()
{
    ofstream arduino_output("/dev/ttyACM0");
    ifstream arduino_input("/dev/ttyACM0");

    int value;
    string txt;

    while(cin >> value){
        arduino_output << value << endl;
        arduino_input >> txt;//I never recieve the "OK" (Which I should get)
        cout << txt;
    }

    arduino_input.close();
    arduino_output.close();
    return(0);
} 

Aqui está o problema:

        cin >> value;
        arduino_output << value << endl;
        arduino_input >> txt;//I never recieve the "OK" (Which I should get)
        cout << txt;

mas se eu fizer isso, funciona:

        cin >> value;
        arduino_output << value << endl;

        for(int i=0;i<10000;++i)
        for(int j=0;j<10000;++j){ //Waste a lot of time
           ++value;
           --value;
        }

        arduino_input >> txt; //I always recieve the "OK"
        cout << txt; //I can see the "OK"

Então, como faço para que meu computador rápido consiga ler a saída lenta do arduino? (Sem usar for-loops para perder tempo)

Aqui diz algumas coisas sobre retorno de chamadahttp://www.cplusplus.com/reference/ios/ios_base/register_callback/&nbsp;mas eu nunca consegui fazê-lo funcionar. Ele diz que suporta 3 eventos e nenhum deles é: "Se o buffer de entrada não estiver vazio, chame esta função".

Como a solução definitiva seria uma função de retorno de chamada sempre que o buffer de entrada não estiver vazio.

Uma solução aceitável seria uma versão equivalente a c ++ da versão do arduino "Serial.available ()".

Outra solução aceitável seria qualquer coisa que me force a não confiar em dois argumentos. 3 for-loops não são aceitáveis se é isso que você está pensando.

EDIT1: mostrou o código original
EDIT2: Estou usando o linux (lubuntu)
EDIT3: Alguém ficou confuso onde o código foi escrito. Estranho.