Linux 文件截断的几种方式

Posted 明明1109

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 文件截断的几种方式相关的知识,希望对你有一定的参考价值。

文件截断, 指的是将文件内容分成两半, 只保留需要的文件长度的那部分. 通常, 将文件长度截断为0.
文件截断方式:
1. 使用系统调用open/fopen O_TRUNC截断
open截断文件, 会清空文件已有内容, 即保留长度为0. 指定O_TRUNC标识时, 文件必须可写方式(如O_RDWR, O_WRONLY)打开.

例子,

int fd = open(FILE_PATH, O_RDWR | O_TRUNC); 

close(fd);

注意: 如果fd指向FIFO文件, 或终端设备文件, O_TRUNC标识将会忽略

类似地, 可以使用C库函数fopen截断文件, 功能类似于open, 接口形式不一样
例子,

// "w" <=> O_WRONLY | O_CREAT | O_TRUNC
// "w+" <=> O_RDWR | O_CREAT | O_TRUNC
FILE* fp = fopen(FILE_PATH, "w"); // "w+" 也可以

fclose(fp);

2. 使用系统调用truncate/ftruncate
truncate可以将文件截断为指定长度(byte).
同样可以使用ftruncate, 区别是参数类型, truncate接受字符串形式文件路径, ftruncate接受已打开的文件描述符作为文件路径.

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

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

例子,

int ret = truncate(FILE_PATH, 0); // 文件长度截断为0
ret = truncate(FILE_PATH2, 100); // 文件长度截断为100byte

3. 使用shell命令truncate
-s 选项是截断为指定byte长度

$ vim testfile
abcd
$ truncate ./testfile -s 2
$ cat testfile
ab

以上是关于Linux 文件截断的几种方式的主要内容,如果未能解决你的问题,请参考以下文章

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式

一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式

Linux开机自动加载的几种方法

Linux经常使用的文件传输的几种方式