C++ 64-битная поддержка std::ostream

Я собираюсь перейти от использования стандартных указателей FILE из некоторого старого кода к использованию потоков C++, но мне нужно, чтобы LARGEFILE искал поддержку (флаги компилятора, которые активируют эту поддержку: -D_FILE_OFFSET_BITS=64 et al), который я могу получить, используя тип данных off64_t.

На мой исходный вопрос был дан ответ по этому вопросу материи и C API, и теперь я надеюсь, что смогу перейти к использованию потоков C++.

Вызывают ли одни и те же флаги возможность поиска файловых потоков в C++?


person John Bellone    schedule 17.11.2009    source источник


Ответы (1)


Итак, я провел быстрый тест с файлом размером 16 ГБ, и, похоже, он сработал. Вот код, который я использовал.

// compiled with : g++ -o largefile -D_FILE_OFFSET_BITS=64 largefile.cpp
#include "iostream"
#include "fstream"

int
main (int argc, char * argv[]) {
        char line[4096];
        std::ifstream stream ("/home/jbellone/largefile.csv");

        // Seek forward to somewhere past 4GB
        stream.seekg (10294967296, std::ios_base::beg);

        stream.getline (line, 100);

        std::cout << stream.tellg() << " " << line << "\n";      
}
person John Bellone    schedule 17.11.2009