linux下如何通过lseek定位大文件
2014-09-11 15:22
309 查看
背景:
有一张16GB SD卡,插入开发板SD卡插槽,通过二进制方式向里面写入数据,在通过lseek()函数定位时返回-1,(本意是通过lseek()获取SD卡大小)代码如下:
large_sd.c
编译: powerpc-linux-gcc -o large_sd large_sd.c
在开发板上执行,打印结果:
MAX SEEK = -1
后来通过搜索发现,原来是lseek()溢出所致,修改代码如下:
编译: powerpc-linux-gcc -D_FILE_OFFSET_BITS=64 -o large_sd large_sd.c
再次在开发板上执行:
MAX SEEK = 15707668480
成功。
总结:
1.如果通过lseek()定位大文件,返回值需要使用long long型变量接收,以防止溢出。
2.编译时要加选项-D_FILE_OFFSET_BITS=64来定义_FILE_OFFSET_BITS为64
3.printf使用%lld来打印long long int 型。
有一张16GB SD卡,插入开发板SD卡插槽,通过二进制方式向里面写入数据,在通过lseek()函数定位时返回-1,(本意是通过lseek()获取SD卡大小)代码如下:
large_sd.c
#include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> int main(int argc, char *argv[]) { long max_seek = 0; int fd = open("/dev/mmcblk0",O_RDWR); if(fd < 0) { printf("open file error.\n"); return -1; } max_seek = lseek(fd,0,SEEK_END); printf("MAX SEEK = %ld\n",max_seek); return 0; }
编译: powerpc-linux-gcc -o large_sd large_sd.c
在开发板上执行,打印结果:
MAX SEEK = -1
后来通过搜索发现,原来是lseek()溢出所致,修改代码如下:
#include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> int main(int argc, char *argv[]) { long long max_seek = 0; int fd = open("/dev/mmcblk0",O_RDWR); if(fd < 0) { printf("open file error.\n"); return -1; } max_seek = lseek(fd,0,SEEK_END); printf("MAX SEEK = %lld\n",max_seek); return 0; }
编译: powerpc-linux-gcc -D_FILE_OFFSET_BITS=64 -o large_sd large_sd.c
再次在开发板上执行:
MAX SEEK = 15707668480
成功。
总结:
1.如果通过lseek()定位大文件,返回值需要使用long long型变量接收,以防止溢出。
2.编译时要加选项-D_FILE_OFFSET_BITS=64来定义_FILE_OFFSET_BITS为64
3.printf使用%lld来打印long long int 型。
相关文章推荐
- linux下可执行程序如何定位共享库文件以及如何让系统找到用户指定的库
- linux下可执行程序如何定位共享库文件以及如何让系统找到用户指定的库 .
- linux下通过lseek()实现文件大小设置
- 如何在Linux ELF格式的文件(可执行binary,以及so文件)中定位到对应的函数位置
- linux如何通过命令设置文件共享
- 如何在 Linux 中快速地通过 HTTP 提供文件访问服务
- linux编程学习笔记(八) 文件 定位 lseek pread pwrite
- linux中的dmesg命令简介------没有core文件时如何定位core dump问题
- 如何在Linux系统通过命令行生成随机文件
- 如何通过SecureCRT中命令方式上传文件到LINUX上
- linux磁盘满时,如何定位并删除文件
- linux磁盘满时,如何定位并删除文件
- Linux 通过lseek()来实现文件大小的设置
- linux下c代码如何把指定文件作为附件,通过evolution发送邮件
- Linux文件定位读写—lseek、pread、pwrite
- Linux 通过lseek()来实现文件大小的设置
- linux下可执行程序如何定位共享库文件以及如何让系统找到用户指定的库
- 如何使用 SSHFS 通过 SSH 挂载远程的 Linux 文件系统或者目录
- 如何在Linux系统通过命令行生成随机文件
- linux磁盘满时,如何定位并删除文件