Передайте файл байтов в программу C ++, через Linux и прочитайте побайтово?

0

Есть ли способ передать файл (bytes-, очевидно) в C++ приложение в Linux. Однако, вместо того, чтобы просто использовать getline() я хотел бы читать каждый байт только один раз. Например, я не хочу использовать getline() потому что он будет читать все байты до "\n", а затем мне также придется перечитать байты, данные мне через getline(), поэтому байты читать дважды. Я просто хотел бы "повторить" каждый байт один раз.

Какая будет самая эффективная техника, чтобы читать байты PAGE_SIZE? Любой пример кода приветствуется!

Теги:
pipe
cin

1 ответ

4

Не забывайте, что std::cin имеет тип std::istream. Вы можете использовать стандартный get() на нем для получения char за раз с:

char nextVal = std::cin.get();

Чтобы прочитать PAGE_SIZE байты в go, используйте read() вместо:

char *buffer = new char[PAGE_SIZE];
std::cin.read(buffer, PAGE_SIZE);

Не забудьте всегда проверять условия ошибки и EOF после прочтения.

  • 0
    Однако это вручную реализует то, чего достигают отображаемые в памяти файлы Linux. Так что, если производительность является проблемой, это может быть лучшим подходом.
  • 0
    Спасибо за это - согласитесь ли вы, что чтение байтов PAGE_SIZE за раз будет наиболее эффективным? Будет ли «аккуратный» способ обработки последнего чтения (где не обязательно должны оставаться байты PAGE_SIZE)?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню