Tag: 大文件

为什么我的程序不能为文件节省大量(> 2GB)?

我无法弄清楚为什么我的程序无法将超过2GB的数据保存到文件中。 我不知道这是编程还是环境(OS)问题。 这是我的源代码: #define _LARGEFILE_SOURCE #define _LARGEFILE64_SOURCE #define _FILE_OFFSET_BITS 64 #include #include #include #include #include #include /*————————————-*/ //for file mapping in Linux #include #include #include #include #include #include /*————————————-*/ #define PERMS 0600 #define NEW(type) (type *) malloc(sizeof(type)) #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) void write_result(char *filename, char *data, long long length){ int […]

在32位系统上使用libevent提供大文件(> 2GB)

序言:基于libevent v2(evhttp),Linux,ARM,glibc2.3.4用C编写的轻量级http服务器 我正在尝试使用32位系统上的evbuffer_add_file()来提供大文件(超过2GB)。 libevent是用-D_FILE_OFFSET_BITS = 64标志编译的。 这是简化的代码: int fd = -1; if ((fd = open(path, O_RDONLY)) < 0) { // error handling } struct stat st; if (fstat(fd, &st) < 0) { // error handling } struct evbuffer *buffer = evbuffer_new(); evbuffer_set_flags(buffer, EVBUFFER_FLAG_DRAINS_TO_FD); // force using system's sendfile evbuffer_add_file(buffer, fd, 0, st.st_size); evhttp_send_reply(req, 200, NULL, […]

如何使用C / C ++编写/创建大于2GB的文件

我尝试使用write()函数将大块内存写入一个文件(超过2GB),但从未成功。 有人可以很好并告诉我该怎么做?

fread是否因大文件而失败?

我必须分析一个16 GB的文件。 我正在使用fread()和fseek()顺序读取文件。 这可行吗? fread()为这么大的文件工作吗?

在文件> 2GB时,off_t没有-D_FILE_OFFSET_BITS = 64

1-我想知道,如果我尝试读取大小超过2GB的文件而不用使用off_t选项-D_FILE_OFFSET_BITS=64并使用此页面上的第二个函数编译我的程序,会出现什么问题? 它会段错吗? 2-我打算在off64_t和。下使用这个实现 #define _LARGEFILE64_SOURCE 1 #define _FILE_OFFSET_BITS 64 会有问题吗?

c处理大文件

我需要解析一个大小可能很多gbs的文件。 我想在C中这样做。任何人都可以建议任何方法来实现这一目标吗? 我需要打开和解析的文件是我从mac的硬盘驱动器获取的硬盘驱动器转储。 但是,我计划在64位Ubuntu 10.04中运行我的程序。 另外,由于文件大小越大,方法越优化越好。

如何移植大文件支持?

我目前正在编写一个C程序,用于读取和写入大小超过2 GiB的文件。 在linux上, feature_test_macros (7)指定: _LARGEFILE64_SOURCE Expose definitions for the alternative API specified by the LFS (Large File Summit) as a “tran‐ sitional extension” to the Single UNIX Specification. (See ⟨http://opengroup.org/platform /lfs.html⟩) The alternative API consists of a set of new objects (ie, functions and types) whose names are suffixed with “64” (eg, off64_t versus […]

大文件支持无法在C编程中工作

我正在尝试编译一个共享对象(最终在Python中使用ctypes)。 用于构建对象的命令行是: gcc -Wall -O3 -shared -Wl,-soname,borg_stream -lm -m128bit-long-double -fPIC \ -D_FILE_OFFSET_BITS=64 -o borg_stream.so data_stream.c data_types.c \ file_operations.c float_half.c channels.c statistics.c index_stream.c helpers.c 该库可在32位操作系统上正确构建,并且可以满足小文件的需要。 但是,对于大于4GB的文件,它无法进行unit testing。 此外,它在执行fseek / ftell时将errno设置为EOVERFLOW。 但是,如果我printf sizeof(off_t),它返回8.如果我删除-D_FILE_OFFSET_BITS=64 ,那么它打印4.所以似乎-D_FILE_OFFSET_BITS正在正常工作。 为什么大文件支持仍然不起作用? 我究竟做错了什么?

C ++中的大文件支持

每个平台上的64位文件API都不同。 在windows中: _fseeki64 在linux中: fseeko 在freebsd:另一个类似的电话…… 我怎样才能最有效地使它更方便和便携? 有什么有用的例子吗?

获取C中的大文件大小

在有人抱怨“重复”之前,我一直在彻底检查SO,但似乎还没有干净的答案,尽管问题看起来很简单。 我正在寻找一个可移植的C代码 ,它能够提供文件的大小,即使这样的文件大于4GB。 通常的方法(fseek,ftell)工作正常,只要文件仍然<2GB。 它在各处得到了相当好的支持,所以我试图找到相同的东西。 不幸的是,所有编译器都不支持更新的方法(fseeko,ftello)。 例如,MinGW错过了它(显然是MSVC)。 此外,一些评论让我相信新的返回类型(off_t)不一定支持> 2GB的大小,它可能依赖于一些外部参数来进行检查。 MSVC不支持明确的方法(fseeko64,ftello64)。 MS提供等效的_fseeki64和_ftelli64。 这已经很糟糕,但它变得更糟:一些Linux配置似乎在运行时严重支持这些function。 例如,我在PowerPC上的Debian Squeeze,使用GCC 4.4,将使用fseeko64产生一个“filesize”方法,它始终返回0(虽然它适用于Ubuntu64)。 MinGW似乎回答了2GB以上的随机垃圾。 好吧,就可移植性而言,我有点无能为力。 如果我需要制作一堆#if #else,那么为什么不首先直接使用OS和编译器细节方法,例如用于MSVC的GetFileSize()。