Je suis en train d'encapsuler la fonctionnalité de socket linux de l'espace utilisateur dans du C++ pour un système embarqué (oui, cela réinvente probablement la roue). Je veux offrir une implémentation en lecture et en écriture en utilisant un vecteur.Utilisation de read() directement dans un C++ std: vector
Faire l'écriture est assez facile, je peux simplement passer &myvec[0]
et éviter la copie inutile. Je voudrais faire la même chose et lire directement dans un vecteur, plutôt que de lire dans un tampon char puis de copier tout cela dans un vecteur nouvellement créé.
Maintenant, je sais combien de données je veux lire, et je peux allouer de manière appropriée (vec.reserve()
). Je peux également lire dans &myvec[0]
, bien que ce soit probablement une idée très mauvaise. Évidemment, cela ne permet pas à myvec.size de renvoyer quoi que ce soit de sensé. Est-il possible de faire ce que:
- ne se sent pas tout à fait dégueu d'une sécurité/C++ perspective
- ne comporte pas deux copies du bloc de données - une fois de noyau vers l'espace utilisateur et une fois de un tampon de style C
char *
dans un vecteur C++.
Un vecteur de quoi? –
Un vecteur de caractères (bien, octets)! – Joe
Vous voulez probablement utiliser 'uint8_t' ou' unsigned char' pour les octets. – tzaman