Comunicacion PC-Arduino, C++, Usb

Saludos estoy teniendo un problema con un programa, la idea es esta:
En arduino un simple programa donde se recibe un dato por usb, cuando lo recibe prende un led,(nada complicado)

int led = 13;
int valor;


void setup() {                
  pinMode(led, OUTPUT);     
  Serial.begin(9600);
}


void loop() {
  digitalWrite(led, LOW);
  while(Serial.available()>0){
  digitalWrite(led, HIGH);   
  delay(500);              
  digitalWrite(led, LOW);   
  delay(500);               
  Serial.print("Recibido: ");
  Serial.println(valor);
  Serial.flush(); 
  }
}

En C++, mando un dato

int main (int argc, char *argv[]) {
    	int i;
	FILE *fd;
	
	printf("\n Ingresar valor: ");
	scanf("%d",&i);
	while(i!=0){
		fd=fopen("/dev/ttyACM0","w");
		fwrite(&i,sizeof(int),1,fd);
		sleep(1);
		fclose(fd);
		printf("\n Ingresar valor: ");
		scanf("%d",&i);
	}
	return 0;
}

El problema, en un primer momento al enviar un dato, si observo el monitor serial en el IDE de arduino, veo que recibo el dato y luego 3 ceros, esto por que motivo es?
Duda aparte, si bien es de C++ entraría en la consulta, cuando hago la comunicación entre PC y arduino, debería configurar la UART, supongo que no ya que es el arduino el que la configura al hacer Serial.Begin().
Para el caso de querer recibir en la PC debería chequear en el puerto si hay disponible algún dato, como se obtendria la direccion hexadecimal del puerto USB que estoy usando, estube tratando de sacar algo en limpio desde aca Document Library | USB-IF.
Por cierto estoy usando linux, y un arduino Mega

MIra en documentación el tutorial de Metaconta al respecto. Comunicación serie con C# y Arduino