博客專欄

EEPW首頁 > 博客 > 嵌入式Linux:truncate()和ftruncate()函數(shù)截斷文件

嵌入式Linux:truncate()和ftruncate()函數(shù)截斷文件

發(fā)布人:美男子玩編程 時間:2024-05-15 來源:工程師 發(fā)布文章

使用系統(tǒng)調(diào)用 truncate() 或 ftruncate() 可以將普通文件截斷為指定字節(jié)長度。函數(shù)原型如下所示:

#include <unistd.h> int truncate(const char *path, off_t length);int ftruncate(int fd, off_t length);


這兩個函數(shù)的區(qū)別在于:ftruncate() 使用文件描述符 fd 來指定目標(biāo)文件,而 truncate() 則直接使用文件路徑 path 來指定目標(biāo)文件,但它們的功能是一樣的。


這兩個函數(shù)都可以對文件進(jìn)行截斷操作,即將文件截斷為參數(shù) length 指定的字節(jié)長度。截斷的意思是,如果文件目前的大小大于參數(shù) length 所指定的大小,則多余的數(shù)據(jù)將被丟失,相當(dāng)于將多余部分“砍”掉;如果文件目前的大小小于參數(shù) length 所指定的大小,則文件將被擴(kuò)展,擴(kuò)展部分將填充空字節(jié) 。


在使用 ftruncate() 進(jìn)行文件截斷操作之前,必須先調(diào)用 open() 函數(shù)打開該文件以獲取文件描述符,并且必須具有可寫權(quán)限,即調(diào)用 open() 打開文件時需要指定 O_WRONLY 或 O_RDWR。


這兩個函數(shù)調(diào)用并不會影響文件的讀寫位置偏移量,因此在截斷后通常需要重新設(shè)置文件的當(dāng)前讀寫位置偏移量,以防止由于之前指向的位置已經(jīng)不存在而發(fā)生錯誤(例如,文件長度變短后,原來的讀寫位置不再存在)。


調(diào)用成功返回 0,失敗返回 -1,并設(shè)置 errno 以指示錯誤原因。


分別使用 ftruncate() 和 truncate() 將當(dāng)前目錄下的文件 file1 截斷為長度 0 字節(jié),并將文件 file2 截斷為長度 1024 字節(jié)。

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> int main(void) {    int fd;     /* 打開 file1 文件 */    if ((fd = open("./file1", O_RDWR)) < 0) {        perror("open error");        exit(EXIT_FAILURE);    }     /* 使用 ftruncate 將 file1 文件截斷為長度 0 字節(jié) */    if (ftruncate(fd, 0) < 0) {        perror("ftruncate error");        exit(EXIT_FAILURE);    }     /* 使用 truncate 將 file2 文件截斷為長度 1024 字節(jié) */    if (truncate("./file2", 1024) < 0) {        perror("truncate error");        exit(EXIT_FAILURE);    }     /* 關(guān)閉 file1 退出程序 */    if (close(fd) < 0) {        perror("close error");        exit(EXIT_FAILURE);    }     exit(EXIT_SUCCESS);}


這個程序是一個簡單的C程序,它演示了如何使用系統(tǒng)調(diào)用 ftruncate() 和 truncate() 來截斷文件。


以下是程序的主要步驟:

  • 導(dǎo)入必要的頭文件。

  • 定義 main() 函數(shù)。

  • 在 main() 函數(shù)中聲明一個整型變量 fd 作為文件描述符。

  • 使用 open() 函數(shù)打開名為 "file1" 的文件,并以讀寫方式打開,如果打開失敗則輸出錯誤信息并退出程序。

  • 使用 ftruncate() 函數(shù)將文件描述符 fd 指向的文件截斷為長度為 0 字節(jié),如果截斷失敗則輸出錯誤信息并退出程序。

  • 使用 truncate() 函數(shù)將名為 "file2" 的文件截斷為長度為 1024 字節(jié),如果截斷失敗則輸出錯誤信息并退出程序。

  • 使用 close() 函數(shù)關(guān)閉文件描述符 fd,釋放資源。

  • 退出程序并返回 0。


總體而言,該程序展示了如何使用 ftruncate() 和 truncate() 函數(shù)來截斷文件的示例,截斷文件的長度可以根據(jù)需要進(jìn)行設(shè)置。


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: 嵌入式 Linux

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉