Я попытался использовать функцию write() для записи большой части памяти в файл (более 2 ГБ), но никогда не получится. Может ли кто-нибудь быть хорошим и сказать мне, что делать?Как написать/создать файл размером более 2 ГБ с помощью C/C++
ответ
Это зависит от операционной системы, процессора, файловой системы. В системах Linux/x86-64 (с файловыми системами ext3) это тривиально. Просто используйте обычные библиотечные функции (в C++ std::ofstream
, в C <stdio.h>
, fopen
& & fprintf
и т. Д.) Или базовые системные вызовы (открыть, записать).
Предполагая, что Linux :)
http://www.suse.de/~aj/linux_lfs.html
1/определяют _FILE_OFFSET_BITS до 64 2/определить _LARGEFILE_SOURCE и _LARGEFILE_SOURCE64 4/Используйте флаг O_LARGEFILE с открытым для работы на большой файл
Кроме того, некоторые информация имеется: http://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html#index-fopen64-931
В эти дни файловые системы, которые у вас есть на вашей системе будет поддерживать большой файл из коробки.
Требуется только шаг 1 или полезно. 2-4 являются фиктивными/устаревшими/вредными для переносимости. –
Эй, я попробовал это. На самом деле, используя fopen64, я могу создать файл с максимальным размером 4 ГБ. Но мне нужно больше. В любом случае, для вас совет. – tzcoolman
Добавить -D_FILE_OFFSET_BITS=64
в командную строку вашего компилятора (aka CFLAGS
), и он будет работать. Это не обязательно для любой 64-разрядной системы, и это также не нужно для некоторых (но не всех) 32-битных систем в наши дни.
Избегайте советов идти писать O_LARGEFILE
или open64
и т. Д. На всем протяжении вашего источника. Это не переносится и, довольно просто, уродливо.
Редактировать: На самом деле, я думаю, что мы все неправильно поняли вашу проблему. Если вы используете 32-разрядную систему, то наибольший возможный одиночный объект в памяти составляет 2 ГБ-1 байт (то есть SSIZE_MAX
). В POSIX поведение write
для аргументов размера, которое не может быть помещено в ssize_t
, не определено; это потому, что write
возвращает тип ssize_t
и не может представлять количество байтов, записанных, если оно больше. Возможно, что более важно, для реализации очень опасно, чтобы объекты настолько велики, что их размер не соответствует ptrdiff_t
, поскольку это создало бы ситуацию, когда арифметика указателя могла бы вызывать переполнение целого числа и, таким образом, неопределенное поведение. Возможно, вы смогли создать такой большой объект с mmap
(я бы назвал это ошибкой в ядре вашей системы или libc), но это очень плохая идея и приведет ко всем ошибкам. Если вам нужны отдельные объекты размером более 2 ГБ, вам действительно нужно запустить на 64-битной машине, чтобы она была безопасной и без ошибок.
- 1. Как написать avi-файл с OpenCV размером более 2 ГБ?
- 2. Wix: обработка файлов размером более 2 ГБ
- 3. System.IO.File.ReadAllBytes для файла размером более 2 ГБ
- 4. Как создать файл размером более 2 ГБ в Linux/Unix?
- 5. Импорт sql-файлов размером более 2 ГБ?
- 6. Запись файла размером более 2 Гб
- 7. Импортировать XML-файл размером более 2 ГБ в DB2 9.7
- 8. Загрузить файл размером 2 ГБ с помощью PHP
- 9. API readdir, пытающийся прочитать файл размером более 2 ГБ
- 10. файлы программирования размером более 2 ГБ с использованием C# .Net
- 11. Как читать большой файл более 2 ГБ с помощью FileStream
- 12. Как загрузить файлы размером более 2 ГБ в PHP?
- 13. как записать данные в файл размером более 2 ГБ с помощью fstream в C++
- 14. Загрузка файла размером более 2 ГБ с использованием PHP
- 15. Как загрузить файл размером более 4 ГБ в игровой системе?
- 16. Импорт XML-файла размером более 2 ГБ в DB2
- 17. libcurl + openssl не может скачивать файлы размером более 2 ГБ
- 18. Генерировать исполняемый файл размером более 4 ГБ с TurboStudio
- 19. Обработка файлов размером более 2 ГБ в MSVC6!
- 20. Строка длиной более 2 ГБ
- 21. AviFile Library создает avi размером более 2 ГБ - не используется
- 22. C - fwrite двоичный файл размером более 4 ГБ
- 23. Как разобрать файл размером 7 ГБ с помощью Data.ByteString?
- 24. Загрузка файлов размером более 2 ГБ в ASP.NET MVC 3
- 25. Поиск и запись файлов размером более 2 ГБ в C#
- 26. Чтение файла размером более 2 ГБ в память в Java
- 27. Файл журнала SQL Server размером более 5 ГБ
- 28. Ищете файл размером более 4 ГБ на C++?
- 29. R анализ кода csv файл размером более 8 ГБ
- 30. Обновление файлов размером более 1 ГБ?
В какой файловой системе и в какой операционной системе мы говорим? –
[Что вы пробовали] (http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – jpm
Как вы писали? Фрагмент кода будет приятным. – ArjunShankar