truncate ftruncate函數
truncate()和ftruncate()都可以用來修改文件大小,但兩者之間也有一些區別。
一、truncate()函數
頭文件:
#include <unistd.h>
函數定義:
int truncate(const char *path, off_t length);
函數調用:
truncate("/aaa",500);
函數說明:
truncate()會將參數path指定的文件大小改為參數length指定的大小。 如果原來的文件大小比參數length大,則超過的部分會被刪除
返回值:
執行成功則返回0, 失敗返回-1, 錯誤原因存於errno
錯誤代碼:
1 EACCESS 參數path所指定的文件無法存取 2 EROFS 欲寫入的文件存在於只讀文件系統內 3 EFAULT 參數path指針超出可存取空間 4 EINVAL 參數path包含不合法字符 5 ENAMETOOLONG 參數path太長 6 ENOTDIR 參數path路徑並非一目錄 7 EISDIR 參數path指向一目錄 8 ETXTBUSY 參數path所指的文件為共享程序,而且正被執行中 9 ELOOP 參數path 有過多符號連接問題。 10 EIO I/O存取錯誤
二、ftruncate()函數
頭文件:
#include<unistd.h>
函數定義:
int ftruncate(int fd,off_t length);
函數調用:
1 out=open("/aaaa",O_RDWR|O_CREAT,S_IRUSR); 2 ftruncate(out,500); 3 close(out);
函數說明:
ftruncate()會將參數fd指定的文件大小改為參數length指定的大小。
參數fd為已打開的文件描述詞,而且必須是以寫入模式打開的文件。
如果原來的文件大小比參數length大,則超過的部分會被刪去。
返回值:
執行成功則返回0,失敗返回-1,錯誤原因存於errno。
錯誤代碼:
1 EBADF 參數fd文件描述詞為無效的或該文件已關閉。 2 EINVAL 參數fd 為一socket 並非文件,或是該文件並非以寫入模式打開。
