c語言fseek函數(shù)定義 c語言函數(shù)f

C語言大文件操作疑問(fseek)

是有這個限制的。

我們提供的服務(wù)有:網(wǎng)站設(shè)計、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、黃埔ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學管理、有技術(shù)的黃埔網(wǎng)站制作公司

如果使用的標準的c函數(shù)的。

如果是你是32操作系統(tǒng),c語言操作文件的大小是 2^31 ,2G

如果是你是64操作系統(tǒng),c語言操作文件的大小是.2^63 ,8589934592 G

你說的問題肯定,出在32位操作系統(tǒng)上。

一是:

操作系統(tǒng)能不能允許創(chuàng)建2G以上的文件了,具體要看操作系統(tǒng)了。

如果不允許,你的問題就沒什么意義了!

如果操作系統(tǒng)允許的話,都會提供,系統(tǒng)函數(shù)讓你調(diào)用的。

你得自己去找資料了。

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

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

他不用是用c語言標準庫的。函數(shù),能windows提供的系統(tǒng)函數(shù)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;

}

}

關(guān)于C語言的fseek()函數(shù)中的起始位置當前位置如何理解?

這個問題要從FILE結(jié)構(gòu)體的數(shù)據(jù)項組成講起: struct _iobuf { char *_ptr; //文件輸入的下一個位置 int _cnt; //當前緩沖區(qū)的相對位置 char *_base; //指基礎(chǔ)位置(即是文件的起始位置) int _flag; //文件標志 int _file; //文件的有效性驗證 int _charbuf; //檢查緩沖區(qū)狀況,如果無緩沖區(qū)則不讀取 int _bufsiz; //文件的大小 char *_tmpfname; //臨時文件名 } FILE; (注:這是vc++6.0對FILE的定義) 在用fopen()函數(shù)打開文件后系統(tǒng)將自動建立一個數(shù)據(jù)塊存放上述信息。 其中“char *_base; ” 指向文件頭在緩沖區(qū)的位置(即fseek()函數(shù)第三形參origin的SEEK_SET常量) “char *_ptr;” 減一即文件指針的當前位置(即fseek()函數(shù)第三形參origin的SEEK_CUR常量) 函數(shù)原型:int fseek( FILE *stream, long offset, int origin ) 中offset參數(shù)是個相對變量,它是相對于origin而言的。比如 int fseek( fp,100L,SEEK_SET ); 就是以文件頭為基準向后移動100個字節(jié)。原理就是對內(nèi)存中的FILE結(jié)構(gòu)體中的元素作如下操作 FILE._ptr=FILE._base+100; int fseek( fp,100L,SEEK_CUR ); 就是以文件的當前位置為基準向后移動100個字節(jié),相應(yīng)的:FILE._ptr+=100; 其他的就不多講了.明白了嗎?

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

int fseek(FILE *stream, long offset, int fromwhere);函數(shù)設(shè)置文件指針stream的位置。

如果執(zhí)行成功,stream將指向以fromwhere為基準,偏移offset(指針偏移量)個字節(jié)的位置,函數(shù)返回0。如果執(zhí)行失敗(比如offset超過文件自身大小),則不改變stream指向的位置,函數(shù)返回一個非0值。

函數(shù)設(shè)置文件指針stream的位置。如果執(zhí)行成功,stream將指向以fromwhere(偏移起始位置:文件頭0(SEEK_SET),當前位置1(SEEK_CUR),文件尾2(SEEK_END))為基準,偏移offset(指針偏移量)個字節(jié)的位置。如果執(zhí)行失敗(比如offset超過文件自身大小),則不改變stream指向的位置。

fseek函數(shù)和lseek函數(shù)類似,但lseek返回的是一個off_t數(shù)值,而fseek返回的是一個整型。

所以,fseek(fp,sizeof(int)*3,0)函數(shù)將文件指針指向從文件開頭,向后偏移3個int單元的地方。

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

首先得保證文件已經(jīng)打開,不然會報錯。

fseek是一種函數(shù)

fp :指針

offset:偏移量

seek_set:文件開頭

總體意思,將指針移到文件開頭,偏移量為“2”(自己設(shè)置多少,正后,負前,我設(shè)置的意思是移動到后2個字節(jié)處)

當前標題:c語言fseek函數(shù)定義 c語言函數(shù)f
URL鏈接:http://muchs.cn/article40/dogieeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、定制網(wǎng)站服務(wù)器托管、品牌網(wǎng)站設(shè)計、云服務(wù)器、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)