Dust Of Dream

知识真的是一个圆么?

C语言读取大文件的方法

最近需要用C操作文件,但是使用fopen和fseek的时候,在32位操作系统中,没办法操作2G以上的文件,后面经过多次Google和高手指点之后通过open64、lseek解决这个问题:
 1  #include <stdio.h>
 2 // #define _LARGEFILE_SOURCE
 3 // #define _LARGEFILE64_SOURCE
 4 // #define _FILE_OFFSET_BITS 64
 5 #include <sys/types.h>
 6 #include <sys/stat.h>
 7 #include <unistd.h>
 8 #include <stdio.h>
 9 #include <fcntl.h>
10 #include <errno.h>
11 
12 int main(int argc, char *argv[])
13 {
14         off_t  file_last_pos;
15         off_t end = 0;
16         //  FILE           *fp;
17         int fp = open64(argv[1], O_RDONLY);
18         if (fp < 0 ) {
19                 printf("can't open file [%s]\n", strerror(errno));
20                 return 1;
21         } else {
22                 printf("file open success\n");
23         }
24         file_last_pos = lseek(fp, 0, SEEK_END);
25         printf("Size: %1d \n",file_last_pos);
26         close(fp);
27         return 0;
28 }
//这行GCC参数很重要,原来是希望通过define的方式来解决的,但是最后还是只能通过这种方式
gcc -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64    test.c   -o test

posted on 2009-06-16 15:00 Anemone 阅读(3522) 评论(2)  编辑  收藏 所属分类: 牧羊心得

Feedback

# re: C语言读取大文件的方法 2009-07-23 21:16 rrt

你把
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64

放在
#include <stdio.h>

前面就行了,可以不再gcc里制定参数了。  回复  更多评论   

# re: C语言读取大文件的方法 2009-07-23 21:18 rrt

也不需要用open64  回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航:
 

My Links

Blog Stats

News

常用链接

留言簿(1)

随笔分类

随笔档案

新闻档案

相册

常去网站

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜