Sto completando la funzionalità dello spazio utente linux in alcuni C++ per un sistema embedded (sì, è probabile che si reinvii nuovamente la ruota).Utilizzo di read() direttamente in uno std C++: vector
Voglio offrire un'implementazione di lettura e scrittura utilizzando un vettore.
Fare la scrittura è abbastanza semplice, posso solo passare &myvec[0]
ed evitare copie non necessarie. Mi piacerebbe fare lo stesso e leggere direttamente in un vettore, piuttosto che leggere in un buffer di caratteri, quindi copiare tutto ciò in un vettore appena creato.
Ora, so quanti dati voglio leggere e posso allocare in modo appropriato (vec.reserve()
). Posso anche leggere in &myvec[0]
, anche se questa è probabilmente una IDEA MOLTO CATTIVA. Ovviamente questo non consente a myvec.size di restituire qualcosa di sensato. C'è un modo di fare questo che:
- completamente non sentono schifo da una sicurezza/C++ prospettiva
- non comporta due copie del blocco di dati - una volta dal kernel per spazio utente e una volta da un buffer di stile C
char *
in un vettore C++.
Un vettore di cosa? –
Un vettore di caratteri (beh, byte)! – Joe
Probabilmente vorrete usare 'uint8_t' o' unsigned char' per byte. – tzaman