zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    java之SFTP上传下载
    java之FTP上传下载
    JUnit单元测试%MODULE_WORKING_DIR%' does not exist
    MySQL 在线DDL "gh-ost"
    MySQL 主从复制错误1837
    <高性能MySQL> 阅读笔记
    Redis cluster 4.0.9 迁槽不影响读写
    MySQL left join 用法与实例
    Linux 日期 date +%F-%T-%N
    MySQL 使用infobin查找binlog中大事务
  • 原文地址:https://www.cnblogs.com/fortunely/p/14800287.html
Copyright © 2011-2022 走看看