第三章 文件I/O (三)

4,lseek

 

使指针指向文件中的指定位置

 

 

 

//-------------lseek.c----------------------

 

#include <sys/types.h>

 

#include <unistd.h>

 

#include <sys/stat.h>

 

#include <fcntl.h>

 

#include "ourhdr.h"

 

#include "err_error.h"

 

 

 

main()

 

{

 

       int fd;

 

       if((fd=open("123",O_RDWR))==-1)

 

              err_sys("open error");

 

       //还记得吗,123中是"Hello world/n"

 

 

 

       //我们将第一个l改为o,我们使用SEEK_CUR,因为刚打开文件时指针在文件开始的位置

 

       if(lseek(fd,2,SEEK_CUR)==-1)

 

              err_sys("lseek cur error");

 

       if(write(fd,"o",1)!=1)

 

              err_sys("write o error");

 

      

 

       //我们将worldl改为m。注意,新行符占一位,先使指针指向r

 

       if(lseek(fd,-4,SEEK_END)==-1)

 

              err_sys("lseek end error");

 

       if(write(fd,"m",1)!=1)

 

              err_sys("write m error");

 

      

 

       //我们将H改为A

 

       if(lseek(fd,0,SEEK_SET)==-1)

 

              err_sys("lseek set error");

 

       if(write(fd,"A",1)!=1)

 

              err_sys("write A error");

 

 

 

       //我们生成一个空洞

 

       if(lseek(fd,30,SEEK_END)==-1)

 

              err_sys("lseek error");

 

       if(write(fd,"empty",5)!=5)

 

              err_sys("write empty error");

 

 

 

       close(fd);

 

}

 

//------------------------end-------------------------

 

 

 

king@king-laptop:~/blog$ gcc -o lseek lseek.c

 

king@king-laptop:~/blog$ ./lseek

 

king@king-laptop:~/blog$ cat 123

 

Aeolo wormd!

 

emptyking@king-laptop:~/blog$

 

 

 

我们用cat没有看到空洞,看到没,cat遇到新行符'/n'就给换行了。你用vi就可以看到空洞

 

king@king-laptop:~/blog$ vi 123

 

 

 

 Aeolo wormd!

 

 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@empty

 

 

 

//------------启用添加标志再使用sleek-----------------------

 

//------------file.c---------------------

 

#include <sys/types.h>

 

#include <sys/stat.h>

 

#include <unistd.h>

 

#include <fcntl.h>

 

 

 

main()

 

{

 

       char line[100];

 

       int fd;

 

       fd=creat("abcd",0600);

 

       write(fd,"1234567890",10);

 

       close(fd);

 

 

 

       fd=open("abcd",O_RDWR | O_APPEND);

 

       lseek(fd,4,SEEK_SET);

 

       read(fd,line,2);

 

       write(STDOUT_FILENO,line,2);

 

 

 

       lseek(fd,0,SEEK_SET);

 

       write(fd,"abcde",5);

 

 

 

       close(fd);

 

}

 

//-------------------end------------------------

 

king@king-laptop:~/blog$ gcc -o file file.c

 

king@king-laptop:~/blog$ ./file

 

56king@king-laptop:~/blog$ cat abcd

 

1234567890abcdeking@king-laptop:~/blog$               //设置了O_APPEND后,write有了自动设置lseek的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值