Я завершаю функциональность сокета linux для пользовательского пространства в некоторых С++ для встроенной системы (да, это, вероятно, снова изобретает колесо).
Я хочу предложить реализацию чтения и записи с использованием вектора.
Выполнение записи довольно просто, я могу просто передать &myvec[0]
и избежать ненужного копирования. Я хотел бы сделать то же самое и читать прямо в вектор, а не читать в буфере char, а затем копировать все это во вновь созданный вектор.
Теперь я знаю, сколько данных я хочу прочитать, и я могу выделить соответственно (vec.reserve()
). Я также могу читать &myvec[0]
, хотя это, вероятно, ОЧЕНЬ ПЛОХАЯ ИДЕЯ. Очевидно, что это не позволяет myvec.size возвращать что-либо разумное. Есть ли способ сделать это, чтобы:
- Полностью не чувствует себя в безопасности с точки зрения безопасности/С++.
- Не включает две копии блока данных - один раз из ядра в пользовательское пространство и один раз из буфера стиля C
char *
в вектор С++.