truncate() - Unix,Linux系統呼叫 - 技術教學
Tutorials Point


  Unix入門
  Unix Shell程式設計
  高階Unix
  Unix有用參考
  Unix有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考資料     討論論壇     關於TP  

truncate() - Unix,Linux系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

truncate, ftruncate - 將檔案截斷到指定長度

概要

#include <unistd.h>
#include <sys/types.h>

int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);

描述

truncate() 和 ftruncate() 函式將由 path 指定或由 fd 引用的常規檔案截斷為精確 length 位元組的大小。

如果檔案以前大於此大小,則多餘的資料將丟失。如果檔案以前較短,則它將被擴充套件,擴充套件部分將讀取為空位元組(’\0’)。

檔案偏移量不會改變。

如果大小改變,則檔案的 st_ctime 和 st_mtime 欄位(分別是最後狀態更改時間和最後修改時間;參見 stat(2))將被更新,並且 set-user-ID 和 set-group-ID 許可權位可能會被清除。

對於 ftruncate(),檔案必須以寫入模式開啟;對於 truncate(),檔案必須可寫。

返回值

成功時,返回零。出錯時,返回 -1,並且 errno 被相應地設定。

錯誤

對於 truncate()
標籤描述
EACCES 路徑字首的元件被拒絕搜尋許可權,或者使用者無法寫入指定的檔案。(另見 path_resolution(2)。)
EFAULT Path 指向程序已分配的地址空間之外。
EFBIG 引數 length 大於最大檔案大小。(XSI)
EINTR 在執行過程中捕獲到訊號。
EINVAL 引數 length 為負數或大於最大檔案大小。
EIO 更新索引節點時發生 I/O 錯誤。
EISDIR 指定的檔案是目錄。
ELOOP 在轉換路徑名時遇到太多符號連結。
ENAMETOOLONG
 路徑名的一個元件超過 255 個字元,或者整個路徑名超過 1023 個字元。
ENOENT 指定的檔案不存在。
ENOTDIR
 路徑字首的一個元件不是目錄。
EPERM 底層檔案系統不支援將檔案擴充套件到其當前大小之外。
EROFS 指定的檔案位於只讀檔案系統上。
ETXTBSY
 該檔案是一個正在執行的純過程(共享文字)檔案。
對於 ftruncate(),相同的錯誤適用,但現在不是 path 可能出錯的地方,而是 fd 可能出錯的地方
EBADF fd 不是有效的描述符。
EBADFEINVAL
 fd 沒有以寫入模式開啟。
EINVAL fd 不引用常規檔案。

符合標準

4.4BSD、SVr4、POSIX.1-2001(這些呼叫首次出現在 4.2BSD 中)。

註釋

以上描述適用於符合 XSI 的系統。對於不符合 XSI 的系統,POSIX 標準允許 ftruncate() 在 length 超過檔案長度時的兩種行為(請注意,在這種環境下根本沒有指定 truncate()):返回錯誤或擴充套件檔案。像大多數 Unix 實現一樣,Linux 在處理本地檔案系統時遵循 XSI 要求。但是,某些非本地檔案系統不允許使用 truncate() 和 ftruncate() 將檔案擴充套件到其當前長度之外:Linux 上一個值得注意的例子是 VFAT。

參見



previous next Printer Friendly

廣告


  

廣告



廣告