C write() ne pas envoyer de données jusqu'à la fermeture(fd) est appelée

J'ai donc ce code de test pour envoyer un "BONJOUR" sur un port série USB:

int fd;
struct termios tty;

if((fd = open("/dev/ttyUSB0", O_WRONLY|O_NONBLOCK|O_NOCTTY)) == -1){
err(1, "Cannot open write on /dev/ttyUSB0");
}

tcgetattr(fd, &tty);
tty.c_iflag = 0;
tty.c_oflag = 0;
tty.c_lflag = 0;
tty.c_cflag = 0;
tty.c_cc[VMIN] = 0;
tty.c_cc[VTIME] = 0;
cfsetospeed(&tty, B19200);
cfsetispeed(&tty, B19200);
tty.c_cflag |= CREAD|CRTSCTS|HUPCL|CS8;
tcsetattr(fd, TCSANOW, &tty);

printf("Write: %i\n", write(fd, "HELLO", 5));

sleep(5);

if(close(fd) != 0){
warn("Could not close write fd");
}

Le programme s'exécute beaux et "BONJOUR" est envoyé, mais il y a un problème. "BONJOUR" ne semble pas être envoyé lorsque la fonction write() la fonction est appelée, mais plutôt quand le descripteur de fichier est fermé. J'ai ajouté le sommeil(5) de la ligne ci-dessus pour tester cette théorie, et bien sûr, "BONJOUR", est envoyé ~5 secondes après que le programme est exécuté. Comment puis-je obtenir "BONJOUR" à être envoyé immédiatement après la write() de la commande au lieu de la fermer()?

Avez-vous vérifié le tcsetattr valeur de retour?
tcsetattr retourne 0
Vous dites "BONJOUR" n' semble à envoyer lors de l'écriture() la fonction est appelée. Comment êtes-vous établir ce exactement? Êtes-vous sûr qu'il n'est pas envoyé immédiatement et que l'appareil n'est tout simplement pas de traitement?
Je suis en train de lire le port série de l'autre côté et je ne vois pas le "BONJOUR" à venir à travers jusqu'à ce que le programme ci-dessus se ferme.
avez-vous trouvé une solution à cela?

OriginalL'auteur Ryan | 2010-07-12