Linux 文件截断的几种方式

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

文件截断, 指的是将文件内容分成两半, 只保留需要的文件长度的那部分. 通常, 将文件长度截断为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 文件截断的几种方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Visual Studio 2017各版本安装包离线下载、安装全解析.NET Framework 3.5 sp1离线安装方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在linux的weblogic上增加启动参数

如何在linux的weblogic上增加启动参数在windows的myeclipse非常简单,就是window-preference-myclipse-application server-weblogicX-JDK中增加就可以了。但是linux上怎么增加?登陆控制台http://ip:7001/console版本是WebLogic Server管理控制台...

Linux下Redis开机自启(Centos)

废话少说,直接来步骤: 1、设置redis.conf中daemonize为yes,确保守护进程开启。 2、编写开机自启动脚本 vi /etc/init.d/redis 脚本内容如下: # chkconfig: 2345 10 90 # description: Start and Stop redis PATH=/usr/local/bin...

Linux C++ Socket 高并发短连接 TIME_WAIT 挥之不去解决方法

近期遇到一个项目 需要在Linux上建立一个Socket 进行 HTTP_GET , 需要线程高并发的 使用TCP Socket 进行Send 发送HTTP_GET请求到 指定网站 . 而且不需要read数据返回 一旦Send完毕就直接close了, 但这样做却在本地产生了很多 TIME_WAIT 状态 导致端口堵塞无法高并发连接了 . 在网上找了很多资料...

[#Linux] CentOS 7 安装微信详细过程

微信安装 微信安装过程如下: 1,下载最新版本tar.gz压缩包 wget https://github.com/geeeeeeeeek/electronic-wechat/releases/download/V2.0/linux-64.tar.gz 2,解压下载的压缩包。 3,把解压的文件夹放在/opt下。 sudo mv electronic-wech...

linux(1):VMware虚拟软件下安装centos6.8

前言:Linux是一种自由和开放源代码的类UNIX操作系统,继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。本人学习Linux已经有一段时间了,从一开始的小白到现在的略有所悟,深知小白学习的艰辛,因此打算系统把Linux学习的东西整理一下,发布一系列相关博客。该系列博客不定期更新,如有问题欢迎探讨。 所需一系列工具: win7系统...

简单的linux内核移植知识

Linux内核的移植(ARM)总结 虽然没有干过这个工作,不过听说内核移植从来就不是一个人的事。通常都是由一个百人的团队去做的,所以这里讲的仅仅是最简单的一些。往往不去关心原理,只是懂得如何操作罢了。 知识储备 在学习移植之前,需要知道的知识和概念,操作系统启动的过程,bootloader,内核,根文件系统等。 计算机结构:两层结构:软件,硬件。 四层结构:...