基于fallocate为文件打洞

code

c 复制代码
#define _GNU_SOURCE
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include <sys/types.h>
//#include <string>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <linux/falloc.h>
//using namespace std;

int main(int argc, char *argv[])
{
    long blocks = atoi(argv[1]);
    long SIZE = 4096 * blocks;
    long rec_len = 512*1024;
    long num_rec = SIZE/rec_len;
    long rest_size = SIZE - (rec_len*num_rec);
    char* buf;
    long i = 0;
    long offset=0;
    long len=8192;
    mode_t f_attrib = S_IRUSR|S_IWUSR;
    int fd_ret=open("./1.qwj",O_RDWR|O_CREAT, f_attrib);
    if(fd_ret<0)
        perror("creat file fail");
    else{
        lseek(fd_ret, 0, SEEK_END);

        buf = malloc(512*1024);
        memset(buf, 0xcafe, 512*1024);
        //printf("%ld\n",num_rec);
        for(i=0; i<num_rec; i++)
        {
            write(fd_ret, buf, rec_len);
        }

        if(rest_size)
        {
            write(fd_ret, buf, rest_size);
        }
        fsync(fd_ret);
        free(buf);
        printf("Write OK\n");
    }
    i=0;
    //在i偏移的位置上打一个4k大小的洞
    while (i < SIZE){
        if(fallocate(fd_ret,FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, i, 4096)<0)
            perror("could not deallocate");
        i = i + len;
    }
    printf("fallocate OK\n");
    return 0;
}

2.交叉编译

bash 复制代码
aarch64-linux-gnu-gcc -static  write_bigfile.c
相关推荐
二流小码农10 分钟前
鸿蒙开发:this的指向问题
android·ios·harmonyos
Once_day17 分钟前
Linux之rsyslog(4)属性配置
linux·服务器
waving-black21 分钟前
Linux中自定义服务开机自启nginx
linux·服务器·nginx
Lenyiin21 分钟前
《 Linux 修炼全景指南: 六 》软件包管理器
linux·运维·服务器
NiKo_W25 分钟前
Linux 重定向与Cookie
linux·运维·服务器·前端·网络·线程·协议
ytttr87329 分钟前
Rocky Linux 8.9配置Kubernetes集群详解,适用于CentOS环境
linux·kubernetes·centos
HLJ洛神千羽29 分钟前
Linux下程序设计综合实验报告——图书管理系统(黑龙江大学)
linux·运维·服务器
循环不息优化不止37 分钟前
Jetpack Compose 状态管理
android
Arvin6271 小时前
Ubuntu 22.04 Docker 安装指南
linux·ubuntu·docker
Arvin6271 小时前
Jenkins Jobs 备份与恢复
linux·运维·服务器