在使用O_APPEND 标志并以写打开一个已存在的文件,然后用lseek函数将偏移置于开头,在写入数据,写入的数据会显示在那个位置呢???

来源:互联网 发布:足球比赛软件 编辑:程序博客网 时间:2024/05/29 03:42

APLI第五章练习题第二题 在使用O_APPEND 标志并以写打开一个已存在的文件,然后用lseek函数将偏移置于开头,在写入数据,写入的数据会显示在那个位置呢???

 

  直接编程做实验吧

#include<stdio.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<stdlib.h>

#include<unistd.h>

#include<string.h>

int main(int argc ,char*argv[])

{

   int fd;

       if(argc!=2||strcmp(argv[1],"--help")==0)

       {  printf("fild err");

         exit(1);}

       fd=open(argv[1],O_WRONLY|O_APPEND);

       {if(fd<0)

           exit(1);}

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

            printf("lseek fail\n");

   else   if(write(fd,"hello",5)==-1)

          exit(1);

       close(fd);

    return 0;

}

提前新建一个文件ss内容为sss


执行程序,查看文件


发现写入的hello在文件的尾部!!!!!

这是为什么呢!!  以为用O_APPEND打开文件是原子操作,以后对文件的写操作只能从文件尾部写入!!!!

 

而对于读操作来说,lseek还是有效的!可以用lseek来读取你想读的内容!!

0 0
原创粉丝点击