c编程,用什么办法可以直接读取某个文件的最后21个字节?解决办法
c编程,用什么办法可以直接读取某个文件的最后21个字节??
c编程,用什么办法可以直接读取某个文件的最后21个字节?? lseek, fseek 具体调用, 怎么实现的??
------解决方案--------------------
fseek(fp,-21L,SEEK_END);
------解决方案--------------------
仅供参考
c编程,用什么办法可以直接读取某个文件的最后21个字节?? lseek, fseek 具体调用, 怎么实现的??
------解决方案--------------------
fseek(fp,-21L,SEEK_END);
------解决方案--------------------
仅供参考
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <share.h>
#include <conio.h>
int fh;
int c,r;
__int64 offset,offset1,i64,n64,l64,r64;
char ln[16000+1];
int main(int argc,char **argv) {
if (argc<2) {
fprintf(stderr,"Usage:%s filename.txt [10]\nto reverse lines of file [default the last 10 lines,-1 for all lines].\n",argv[0]);
return 1;
}
if (argc==2) n64=10i64;
if (argc>2) sscanf(argv[2],"%I64d",&n64);
fh=_sopen(argv[1],_O_BINARY
------解决方案--------------------
_O_RDONLY
------解决方案--------------------
_O_RANDOM,_SH_DENYNO);
if (-1==fh) {
fprintf(stderr,"Can not _sopen file %s!\n",argv[1]);
return 2;
}
l64=_filelengthi64(fh);if (l64==0i64) {_close(fh);return 0;}
offset=l64;
offset1=_lseeki64(fh,-1i64,SEEK_END);
if (offset1==-1i64) {_close(fh);return 3;}
i64=0i64;
while (1) {
if (_read(fh,&c,1)<1) break;//
if (('\n'==c && offset1<l64-1i64)
------解决方案--------------------
offset1==0i64) {
if (offset1!=0i64) offset1++;
if (_lseeki64(fh,offset1,SEEK_SET)==-1i64) break;//
r64=offset-offset1;
if (r64<=16000i64) {
r=_read(fh,ln,(unsigned int)r64);
if (r<=0) break;//
} else {
r=16000;
while (1) {
if (r64>(__int64)r) {
r64-=(__int64)r;
if (1i64==r64
------解决方案--------------------
2i64==r64) {
r=8000;
r64+=(__int64)r;
}
} else {
r=(int)r64;
r64=0i64;
}
r=_read(fh,ln,r);
if (r<=0) break;//
if (0i64==r64) break;//
ln[r]=0;
printf("%s",ln);
r=16000;