嵌入式linux开发练习-写程序删除一个文件的第十行。

思路1:
lseek定位到第十一行的行首,然后读内容,然后再去定位,定位到第十行的行首,然后去覆盖写。整个内容是要包含在循环结构中的。
while()
{
lseek 11+read+lseek 10+write

}
最后这个文件会多出来一行长度,就是第十行的长度,最终的文件要进行截短,把多的一块截掉。

代码

  1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<sys/stat.h>
  4 #include<fcntl.h>
  5 #include<string.h>
  6 #include<unistd.h>
  7 #include<stdlib.h>
  8 #define  BUFSIZE  1024
  9 int main(int argc,char ** argv)
 10 {
 11 
 12         int f1,f2;
 13         int ret,row=0,rpos=0,wpos=0,pos=0;
 14         char buf[BUFSIZE];                        //临时数组
 15         if(argc<2)                                //如果传入参数不够,给出提示
 16         {
 17             fprintf(stderr,"用法错误 %d\n",argc);
 18             exit(1);
 19 
 20         }
 21         //只读方式打开
 22         f1=open(argv[1],O_RDONLY);
 23         if(-1==f1)
 24         {
 25 
 26         perror("open()");
 27         exit(1);
 28         }
            //以读写方式打开
 30         f2=open(argv[1],O_RDWR);
 31         if(-1==f2)
 32         {
 33 
 34         perror("open()");
 35         exit(1);
 36         }
 37         //找到读取位置
 38         while(1)
 39         {
 40         if(row==10)
 41         {
 42             lseek(f1,pos,SEEK_SET);
 43             break;
 44 
 45         }
 46         if( read(f1,buf,1)<=0)break;
 47             if(buf[0]=='\n')row++;
 48 
 49             pos++;
 50 
 51         }
 52 

 53         pos=0;
 54         row=0;
 55 
 56         //找到写入位置
 57         while(1)
 58         {
 59         if(row==9)
 60         {
 61             lseek(f2,pos,SEEK_SET);
 62             break;
 63 
 64         }
 65         if( read(f2,buf,1)<=0)break;
 66             if(buf[0]=='\n')row++;
 67 
 68             pos++;
 69 
 70         }
 71 
 72 74 //读取数据写入文件   
 75     while(1){
 76         if(read(f1,buf,1)<= 0) break;
 77         write(f2,buf,1);
 78 
 79     }
 80     //从写入位置开始截断
 81     ret = lseek(f2,0,SEEK_CUR);
 82     ftruncate(f2,trun_num); 
 83     close(f1);//关闭文件
 84     close(f2);
 85     exit(0);
 86 }   
     
 73 
 74 
                                                              74,0-1       底端



 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值