ftruncate(改變檔案大小)

2022-03-19 19:34:35 字數 1017 閱讀 6606

ftruncate(改變檔案大小)

定義函式 intftruncate(int fd,off_t length);

函式說明

ftruncate()會將引數fd指定的檔案大小改為引數length指定的大小。

引數fd為已開啟的檔案描述詞,而且必須是以寫入模式開啟的檔案。

如果原來的檔案大小比引數length大,則超過的部分會被刪去。

返回值執行成功則返回0,失敗返回-1,錯誤原因存於errno。

錯誤**

ebadf 引數fd檔案描述詞為無效的或該檔案已關閉。

einval 引數fd 為一socket 並非檔案,或是該檔案並非以寫入模式開啟。

今天用 ftruncate 截斷檔案, 但怎麼都不能達到預料的效果, 截斷後檔案中的內容比較雜, 而且檔案大小也保持原來的.

新增 fflush() 和 rewind() 後ok.

以下是測試**:

[cpp]view plain

copy

#include 

#include 

#include 

int main()  

for(i=0; i<1000; i++)  

fflush(fp);  

fd = fileno(fp);  

if(ftruncate(fd, 0)<0)  

rewind(fp);  

fprintf(fp, "end\n");  

fclose(fp);  

return 0;  

}  程式執行後, tmp 檔案的內容為 end , 大小為4位元組.

在呼叫 ftruncate() 前用 rewind() 也行.

但用 ftruncate()截斷過的檔案, 在用 fread, fwrite拷貝到另外乙個檔案時, 會出現亂碼和一些'\0'字元. 改用 fgets 和 fputs 則正常.

ftruncate(改變檔案大小)

ftruncate 改變檔案大小 定義函式 intftruncate int fd,off t length 函式說明 ftruncate 會將引數fd指定的檔案大小改為引數length指定的大小。引數fd為已開啟的 檔案描述詞,而且必須是以寫入模式開啟的檔案。如果原來的檔案大小比引數length大...

檔案大小換算

1千吉位元組 tb,terabyte 1024吉位元組 2的40次方位元組 1tb 1024gb 1吉位元組 gb,gigabyte 1024兆位元組 2的30次方位元組 1gb 1024mb 1兆位元組 mb,megabyte 1024千位元組 2的20次方位元組 1mb 1024kb 1千位元組...

獲取檔案大小

1 找到檔案所在的絕對路徑。系統路徑 projectpath request.getsession getservletcontext getrealpath 檔案路徑 在上傳檔案的時候,一定會有檔案相對路徑,如果不清楚,可以打斷點然後在本地找到此檔案。檔案相對路徑 filepath 絕對路徑rea...