Comment puis-je déterminer la quantité d’espace tampon d’écriture / de sortie restant sur un port série linux?

Vous pouvez déterminer la quantité de données pouvant être lues à partir d’un port série sous Linux à l’aide d’un ioctl. Est-il possible de déterminer combien d’espace tampon rest pour le port série lors de l’écriture? Effectivement, je veux écrire un bloc de données sur un port série, en ne réussissant que si tout peut être déchargé en une fois, ou en échouant s’il devait être tronqué. Les écritures et les lectures sur les ports ne sont pas bloquantes. Je ne m’attends pas à ce que ce soit le tampon UART, mais le tampon mémoire du kernel avant le tampon UART (je suppose).

    Vous pouvez déterminer la quantité d’écriture / sortie.

    Pour lire:

     ioctl(device_handler, TIOCINQ, &bytes); 

    Pour écrire:

     ioctl(device_handler, TIOCOUTQ, &bytes); 

    Taille du tampon FIFO:

     serial_struct serinfo; memset(&serinfo, 0, sizeof(serinfo)); ioctl(device_handler, TIOCGSERIAL, &serinfo); serinfo.xmit_fifo_size; 

    Cordialement, VA.

    Le port série est un périphérique de caractères et non un périphérique de bloc. Il n’a pas de tampon. Les périphériques de caractères (tels que le port série, le clavier, la souris) n’écrivent et ne lisent qu’un caractère et non un mot. Par exemple, si vous écoutez une publication en série, une personne écrit “passez une bonne journée”, si vous n’écoutez pas à partir du moment où il commence à taper, vous ne verrez pas la phrase entière. Vous ne verrez que les caractères saisis lorsque vous écoutez

    Si vous accédez au port série à l’aide du descripteur de fichier, vous pouvez utiliser select pour vérifier chaque fois que le descripteur est prêt pour une écriture non bloquante. Je ne sais pas quand cela fonctionne pour les ports série. J’ai utilisé cela pour les sockets TCP et cela a fonctionné.