我试图在C中读取24 GB的XML文件,但它不起作用.当我读到它时,我正在使用ftell()打印出当前位置,但是一旦它达到足够大的数字,它就会回到一个小数字并重新开始,甚至从未获得20%的文件.我认为这是用于存储位置(长)的变量范围的问题,根据http://msdn.microsoft.com/en-us/library/s3f49ktz(VS),它可以达到大约4,000,000,000..80).aspx,而我的文件大小为25,000,000,000字节.一个很长的长期应该工作,但我怎么能改变我的编译器(Cygwin/mingw32)使用或得到它有fopen64?
我有一个C应用程序,我正在尝试为Mac OS X 10.6.4编译:
$ uname -v
Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386
Run Code Online (Sandbox Code Playgroud)
我的gcc情况如下:
$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
Run Code Online (Sandbox Code Playgroud)
我的Makefile情况如下:
CC=gcc
CFLAGS=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -O3 -Wformat -Wall -pedantic -std=gnu99
all: myApp
rm -rf *~
myApp: myApp.o
${CC} ${CFLAGS} myApp.o -lbz2 -o myApp
rm -rf *~
clean:
rm -rf *.o myApp
Run Code Online (Sandbox Code Playgroud)
问题是我的应用程序调用fseeko64和fopen64,并使用off64_t类型进行偏移.当我编译我的应用程序时,我收到以下警告和错误:
$ make myApp
gcc -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -O3 -Wformat -Wall -pedantic …Run Code Online (Sandbox Code Playgroud) 背景:
我正在清理大型(不能保留在内存中)制表符分隔的文件.当我清理输入文件时,我在内存中建立了一个列表; 当它获得1,000,000个条目(内存大约1GB)时,我将其排序(使用下面的默认密钥)并将列表写入文件.此类用于将已排序的文件重新组合在一起.它适用于我迄今遇到的文件.到目前为止,我最大的案例是合并66个已排序的文件.
问题:
示例数据:
这是其中一个文件中的一行的抽象:
'hash_of_SomeStringId\tSome String Id\t\t\twww.somelink.com\t\tOtherData\t\n'
外卖是我'SomeStringId'.lower().replace(' ', '')用作我的排序键.
原始代码:
class SortedFileMerger():
""" A one-time use object that merges any number of smaller sorted
files into one large sorted file.
ARGS:
paths - list of paths to sorted files
output_path - string path to desired output file
dedup - (boolean) remove lines with duplicate keys, default = True
key - use to override sort key, default = "line.split('\t')[1].lower().replace(' ', '')"
will be …Run Code Online (Sandbox Code Playgroud) 我试图找到一个明确的答案而不能,所以我希望有人知道.
我正在Linux(32位操作系统)上使用GCC 4.x开发一个C++应用程序.此应用程序需要能够读取大小> 2GB的文件.
我真的想使用iostream的东西和FILE指针,但我找不到大文件#defines(_LARGEFILE_SOURCE,_LARGEFILE64_SOURCE,_FILE_OFFSET_BITS = 64)对iostream标头有什么影响.
我正在编译32位系统.任何指针都会有所帮助.
根据其文档,双击应该足够了.但是当我打开git bash并运行时git lfs init,它不起作用:
$ git lfs init
git: 'lfs' is not a git command. See 'git --help'.
Run Code Online (Sandbox Code Playgroud) 所以,我正在使用Paperclip和AWS-S3,这很棒.而且效果很好.但是只有一个问题:我需要上传非常大的文件.超过50兆字节.所以,nginx死了.显然,Paperclip在进入S3之前将东西存储到磁盘上?
我找到了这篇非常酷的文章,但它似乎也首先进入磁盘,然后在后台执行其他所有操作.
理想情况下,我可以在后台上传文件...我在使用PHP时有很少的经验,但到目前为止Rails没有.有人能指出我的大方向吗?
我正在尝试为android 构建md5deep(http://md5deep.sourceforge.net/),但是使用默认的构建设置,sizeof(off_t) == 8失败的断言,指示(AFAIK)LFS未启用.我已经尝试通过添加-D_FILE_OFFSET_BITS=64gcc和g ++标志来启用,但它仍然没有做到这一点.添加行来打印_FILE_OFFSET_BITS和sizeof(off_t)的值表明前者确实是64,但后者是4而不是8.
有什么想法吗?
我正在尝试为 64 位架构构建 Android L。
我的代码是这样的:
#if (HAS_LARGE_FILE_SUPPORT)
#define _FILE_OFFSET_BITS 64 //Defined in header file
/*Some File operations*/
#if HAS_LARGE_FILE_SUPPORT
return fseeko(iFile, offset, seekmode);
#else
return fseek(iFile, offset, seekmode);
/*Some File operations*/
#if HAS_LARGE_FILE_SUPPORT
return ftello(iFile, offset, seekmode);
#else
return ftell(iFile, offset, seekmode);
Run Code Online (Sandbox Code Playgroud)
我正在下面ftello和fseeko错误:
error: call to 'ftello' declared with attribute error: not available with _FILE_OFFSET_BITS=64
error: call to 'fseeko' declared with attribute error: not available with _FILE_OFFSET_BITS=64
Run Code Online (Sandbox Code Playgroud)
我检查了fseeko和ftello,在手册页上提到_FILE_OFFSET_BITS使用值 64定义将变成 …
如果使用gcc lfs.c -o lfs编译以下代码,则不会输出任何内容.但是,如果使用g ++ lfs.c -o lfs编译它,则会打印"由stdio.h!"定义的"_LARGEFILE_SOURCE".
#ifdef _LARGEFILE_SOURCE
int largefile_defined_at_start = 1;
#else
int largefile_defined_at_start = 0;
#endif
// This defines _LARGEFILE_SOURCE, but only in C++!
#include <stdio.h>
int main(void) {
#ifdef _LARGEFILE_SOURCE
if (!largefile_defined_at_start)
printf("_LARGEFILE_SOURCE defined by stdio.h!");
#endif
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,编译器都没有定义_LARGEFILE_SOURCE:
gcc -dM -E - < /dev/null |grep _LARGEFILE_SOURCE |wc -l
0
g++ -dM -E - < /dev/null |grep _LARGEFILE_SOURCE |wc -l
0
Run Code Online (Sandbox Code Playgroud)
为什么stdio.h在通过g ++前端调用GCC时定义_LARGEFILE_SOURCE?