请尝试使用open、lseek等函数创建一个含有空洞的文件

/*

创新互联公司是一家集网站建设,定日企业网站建设,定日品牌网站建设,网站定制,定日网站建设报价,网络营销,网络优化,定日网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

  • 当使用lseek函数定位到超出文件尾端之后,对于新写入的数据需要分配磁盘块,但是对于原文件
  • 尾端和新开始写位置之间的部分则不需要分配磁盘块,这会产生空洞文件,文件中的空洞并不要求
  • 在磁盘上占有存储区,具体处理方式与文件系统的实现有关,请尝试使用open、lseek等函数创建
  • 一个含有空洞的文件。
    */
    #include
    #include
    #include
    #include
    #include
    #include
    #include

#define FLAGS O_WRONLY|O_CREAT|O_TRUNC /定义参数flags:以读写方式打开文件,向文件添加内容时从文件尾开始写/
#define MODE 0600 /定义参数MODE:文件所有者读写方式/
#define FILENAME "/home/mrhe/test" /要进行操作的文件/

int main(int argc, char argv[])
{
int count;
int fd;
char buf1[]={"abcdefghij"}; //缓冲区1,长度为10
char buf2[]={"1234567890"}; //缓冲区2,长度为10
const char
pathname=FILENAME;
if((fd=open(pathname,FLAGS,MODE))==-1)
{
printf("error,open file failed!\n");
exit(1);
}
count=strlen(buf1);
if(write(fd,buf1,count)!=count) //调用write函数将缓冲区1的数据写入文件
{
printf("error,write file failed!\n");
exit(1);
}
if(lseek(fd,50,SEEK_SET)==-1)
{
printf("error,lseek failed!\n");
exit(1);
}
count=strlen(buf2);
if(write(fd,buf2,count)!=count) //调用write函数将缓冲区2的数据写入文件
{
printf("error,write file failed!\n");
exit(1);
}
return 0;
}


文章标题:请尝试使用open、lseek等函数创建一个含有空洞的文件
文章出自:http://azwzsj.com/article/ipghjp.html