"); //-->
使用系统调用 truncate() 或 ftruncate() 可以将普通文件截断为指定字节长度。函数原型如下所示:
#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 所指定的大小,则文件将被扩展,扩展部分将填充空字节 。
在使用 ftruncate() 进行文件截断操作之前,必须先调用 open() 函数打开该文件以获取文件描述符,并且必须具有可写权限,即调用 open() 打开文件时需要指定 O_WRONLY 或 O_RDWR。
这两个函数调用并不会影响文件的读写位置偏移量,因此在截断后通常需要重新设置文件的当前读写位置偏移量,以防止由于之前指向的位置已经不存在而发生错误(例如,文件长度变短后,原来的读写位置不再存在)。
调用成功返回 0,失败返回 -1,并设置 errno 以指示错误原因。
分别使用 ftruncate() 和 truncate() 将当前目录下的文件 file1 截断为长度 0 字节,并将文件 file2 截断为长度 1024 字节。
#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() 函数来截断文件的示例,截断文件的长度可以根据需要进行设置。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。
相关推荐
LAN91C111型控制器在嵌入式以太网接口中的应用
RK3576 + ROS2 SLAM建图与导航实战
华清远见嵌入式在线视频教程——4、基于ARM的嵌入式开发
U-BOOT 与 MontaVista Linux 的移植
米尔亮相德国嵌入式展2026 Embedded World
大家在互相借鉴吧!--嵌入式系统词汇表
LCD驱动器SD0432与嵌入式系统的接口设计
linux入门精华
华清远见嵌入式在线视频教程——1、走近嵌入式系统
从COM到SMARC再到OSM:嵌入式计算模块的发展
大家在互相借鉴吧!--嵌入式系统词汇表
汽车存储器新突破:8nm128Mb嵌入式MRAM的研发
华清远见嵌入式在线视频教程——2、嵌入式系统的选择与开发
TI将边缘AI微控制器更深入地融入嵌入式设计
研华模块化电脑SOM-7583:通过模块化架构应对人形机器人应用挑战
嵌入式操作系统大比拼
[链接]Firefox_ 重新发现网络
一款用于远程嵌入式设计的机器人
华清远见嵌入式在线视频教程——3、嵌入式Linux开发应用介绍
展会预告!米尔邀您相约德国嵌入式展 2026Embedded World
未来倾向于UFS用于高性能嵌入式闪存
FFT公司9200的板子的资料
ARM 开发板使用手册 在三星 S3C2410开发板上烧写linux
大家在互相借鉴吧!--嵌入式系统词汇表
嵌入式系统的实时数据接口扩展
大家在互相借鉴吧!--嵌入式系统词汇表
华清远见嵌入式在线视频教程——5、嵌入式Linux移植和u-boot
IAR 扩展了嵌入式开发平台,提供 LTS 服务
嵌入式U盘读写器接口技术和系统设计
Linux系统下USB摄像头驱动开发