C ++ ifstream de linux a 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);
} 

Aquí está el problema:

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

pero si hago esto en su lugar 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"

Entonces, ¿cómo hago para que mi computadora rápida pueda leer la salida lenta del arduino? (Sin usar bucles for para perder tiempo)

Aquí dice algunas cosas sobre la devolución de llamadahttp://www.cplusplus.com/reference/ios/ios_base/register_callback/&nbsp;pero nunca pude hacerlo funcionar. Dice que admite 3 eventos, y ninguno de ellos es: "Si el búfer de entrada no está vacío, llame a esta función".

Porque la solución definitiva sería una función de devolución de llamada para cuando el búfer de entrada no esté vacío.

Una solución aceptable sería una versión equivalente en c ++ de la versión arduino "Serial.available ()".

Otra solución aceptable sería cualquier cosa que me obligue a no confiar en dos bucles for. 3 for-loops no es aceptable si eso es lo que estás pensando.

EDITAR1: mostró el código original
EDIT2: estoy usando linux (lubuntu)
EDITAR3: Alguien se confundió donde se escribió el código. Extraño.