网站建设资讯

NEWS

网站建设资讯

c语言fseek函数定义 c语言函数f

C语言大文件操作疑问(fseek)

是有这个限制的。

我们提供的服务有:网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、黄埔ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的黄埔网站制作公司

如果使用的标准的c函数的。

如果是你是32操作系统,c语言操作文件的大小是 2^31 ,2G

如果是你是64操作系统,c语言操作文件的大小是.2^63 ,8589934592 G

你说的问题肯定,出在32位操作系统上。

一是:

操作系统能不能允许创建2G以上的文件了,具体要看操作系统了。

如果不允许,你的问题就没什么意义了!

如果操作系统允许的话,都会提供,系统函数让你调用的。

你得自己去找资料了。

===============

你可以看一下,sqlite的源代码,我的3-5-4版本

他不用是用c语言标准库的。函数,能windows提供的系统函数SetFilePointer,ReadFile

static int winRead(

sqlite3_file *id, /* File to read from */

void *pBuf, /* Write content into this buffer */

int amt, /* Number of bytes to read */

sqlite3_int64 offset /* Begin reading at this offset */

){

LONG upperBits = (offset32) 0x7fffffff;

LONG lowerBits = offset 0xffffffff;

DWORD rc;

DWORD got;

winFile *pFile = (winFile*)id;

assert( id!=0 );

SimulateIOError(return SQLITE_IOERR_READ);

OSTRACE3("READ %d lock=%d\n", pFile-h, pFile-locktype);

rc = SetFilePointer(pFile-h, lowerBits, upperBits, FILE_BEGIN);

if( rc==INVALID_SET_FILE_POINTER GetLastError()!=NO_ERROR ){

return SQLITE_FULL;

}

if( !ReadFile(pFile-h, pBuf, amt, got, 0) ){

return SQLITE_IOERR_READ;

}

if( got==(DWORD)amt ){

return SQLITE_OK;

}else{

memset(((char*)pBuf)[got], 0, amt-got);

return SQLITE_IOERR_SHORT_READ;

}

}

关于C语言的fseek()函数中的起始位置当前位置如何理解?

这个问题要从FILE结构体的数据项组成讲起: struct _iobuf { char *_ptr; //文件输入的下一个位置 int _cnt; //当前缓冲区的相对位置 char *_base; //指基础位置(即是文件的起始位置) int _flag; //文件标志 int _file; //文件的有效性验证 int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取 int _bufsiz; //文件的大小 char *_tmpfname; //临时文件名 } FILE; (注:这是vc++6.0对FILE的定义) 在用fopen()函数打开文件后系统将自动建立一个数据块存放上述信息。 其中“char *_base; ” 指向文件头在缓冲区的位置(即fseek()函数第三形参origin的SEEK_SET常量) “char *_ptr;” 减一即文件指针的当前位置(即fseek()函数第三形参origin的SEEK_CUR常量) 函数原型:int fseek( FILE *stream, long offset, int origin ) 中offset参数是个相对变量,它是相对于origin而言的。比如 int fseek( fp,100L,SEEK_SET ); 就是以文件头为基准向后移动100个字节。原理就是对内存中的FILE结构体中的元素作如下操作 FILE._ptr=FILE._base+100; int fseek( fp,100L,SEEK_CUR ); 就是以文件的当前位置为基准向后移动100个字节,相应的:FILE._ptr+=100; 其他的就不多讲了.明白了吗?

在c语言中,fseek(fp,sizeof(int)*3,0)是什么意思

int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。

如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。

函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。

fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。

所以,fseek(fp,sizeof(int)*3,0)函数将文件指针指向从文件开头,向后偏移3个int单元的地方。

C语言 fseek(fp,offset,SEEK_SET)什么意思

首先得保证文件已经打开,不然会报错。

fseek是一种函数

fp :指针

offset:偏移量

seek_set:文件开头

总体意思,将指针移到文件开头,偏移量为“2”(自己设置多少,正后,负前,我设置的意思是移动到后2个字节处)


分享文章:c语言fseek函数定义 c语言函数f
文章起源:http://cdweb.net/article/dogieeo.html