第三章 文件I/O (三)

来源:互联网 发布:找工作最靠谱的软件 编辑:程序博客网 时间:2024/05/09 08:31

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的功能

原创粉丝点击