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