通过lseek产生空洞文件
//off_t lseek(int fd,off_t offset, int base) 偏移量 搜索的起始位置(文件頭(SEEK_SET),當前指針位置(SEEK_CUR),文件尾(SEEK_END))unistd.h
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<errno.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#define ERR_EXIT(m)? (perror(m),exit(EXIT_FAILURE))
#define ERR_EXIT(m)\
?? ?do\
?? ?{\
?? ??? ?perror(m);\
?? ??? ?exit(EXIT_FAILURE);\
?? ?}while(0)? //宏要求一條語句
int main(void)
{
?? ?int fd;
?? ?fd=open("hole.txt",O_WRONLY|O_CREAT|O_TRUNC,0644);
?? ?if(fd==-1)
?? ??? ?ERR_EXIT("open error");
??? //寫入5個字符
?? ?write(fd,"ABCDE",5);
?? ?//將文件偏移
?? ?//od? -c hole.txt查看文件空洞。實際磁盤上并未存放\0這些空洞 ls -lh hole.txt有1.1G但實際磁盤上并未全部存儲。
?? ?//并未在磁盤中全部存放,很多的\0信息未存放在磁盤,只有部分信息。du -h hole.txt(磁盤最小塊4K大小)
?? ?if(ret==-1)
?? ?int ret=lseek(fd,1024*1024*1024/*32*/,SEEK_CUR);? //從文件當前位置,偏移到1G之后。只在內核中操作,實際不在磁盤操作。
?? ??? ?ERR_EXIT("lseek error");
?? ?write(fd,"hello",5);
?? ?close(fd);
?? ?return 0;
}
轉載于:https://www.cnblogs.com/wsw-seu/p/8280593.html
總結
以上是生活随笔為你收集整理的通过lseek产生空洞文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flask == scoped_s
- 下一篇: java-多线程安全-锁