前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >嵌入式Linux:truncate()和ftruncate()函数截断文件

嵌入式Linux:truncate()和ftruncate()函数截断文件

作者头像
不脱发的程序猿
发布2024-05-26 10:29:45
950
发布2024-05-26 10:29:45
举报

使用系统调用 truncate()ftruncate() 可以将普通文件截断为指定字节长度。函数原型如下所示:

代码语言:javascript
复制
#include <unistd.h>

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

这两个函数的区别在于:ftruncate() 使用文件描述符 fd 来指定目标文件,而 truncate() 则直接使用文件路径 path 来指定目标文件,但它们的功能是一样的。

这两个函数都可以对文件进行截断操作,即将文件截断为参数 length 指定的字节长度。截断的意思是,如果文件目前的大小大于参数 length 所指定的大小,则多余的数据将被丢失,相当于将多余部分“砍”掉;如果文件目前的大小小于参数 length 所指定的大小,则文件将被扩展,扩展部分将填充空字节 \0

在使用 ftruncate() 进行文件截断操作之前,必须先调用 open() 函数打开该文件以获取文件描述符,并且必须具有可写权限,即调用 open() 打开文件时需要指定 O_WRONLYO_RDWR

这两个函数调用并不会影响文件的读写位置偏移量,因此在截断后通常需要重新设置文件的当前读写位置偏移量,以防止由于之前指向的位置已经不存在而发生错误(例如,文件长度变短后,原来的读写位置不再存在)。

调用成功返回 0,失败返回 -1,并设置 errno 以指示错误原因。

分别使用 ftruncate() 和 truncate() 将当前目录下的文件 file1 截断为长度 0 字节,并将文件 file2 截断为长度 1024 字节。

代码语言:javascript
复制
#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 字节 */
    if (ftruncate(fd, 0) < 0) {
        perror("ftruncate error");
        exit(EXIT_FAILURE);
    }

    /* 使用 truncate 将 file2 文件截断为长度 1024 字节 */
    if (truncate("./file2", 1024) < 0) {
        perror("truncate error");
        exit(EXIT_FAILURE);
    }

    /* 关闭 file1 退出程序 */
    if (close(fd) < 0) {
        perror("close error");
        exit(EXIT_FAILURE);
    }

    exit(EXIT_SUCCESS);
}

这个程序是一个简单的C程序,它演示了如何使用系统调用 ftruncate()truncate() 来截断文件。以下是程序的主要步骤:

  • 导入必要的头文件。
  • 定义 main() 函数。
  • main() 函数中声明一个整型变量 fd 作为文件描述符。
  • 使用 open() 函数打开名为 "file1" 的文件,并以读写方式打开,如果打开失败则输出错误信息并退出程序。
  • 使用 ftruncate() 函数将文件描述符 fd 指向的文件截断为长度为 0 字节,如果截断失败则输出错误信息并退出程序。
  • 使用 truncate() 函数将名为 "file2" 的文件截断为长度为 1024 字节,如果截断失败则输出错误信息并退出程序。
  • 使用 close() 函数关闭文件描述符 fd,释放资源。
  • 退出程序并返回 0。

总体而言,该程序展示了如何使用 ftruncate()truncate() 函数来截断文件的示例,截断文件的长度可以根据需要进行设置。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档