关于UNIX环境下文件I/O -----lseek , read , write的一些偏移问题

#include "apue.h"
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(void)
{
    char buf[80];
    int fd;
    const char *pash = "test.txt";
    fd = open(pash,O_RDWR);                  //打开文件test.txt,获取文件描述符
    off_t offsize = lseek(fd,5,SEEK_SET);       //文本偏移量设为5
    ssize_t size = read(fd,buf,sizeof(buf));    //读取的时候文本偏移量也会发生变化,读取80 , 偏移量最终变为85

    printf("文件描述符为 %d\n",fd);
    printf("文件偏移量为 %ld\n",offsize);
    printf("读取字节数为 %ld\n",size);
    printf("读取的数据为 %s\n",buf);


    char *s = "zzzzzzzzzzzzzzzzzzzzz";
    //前面通过sleek函数偏移了5个字节,读取80个字节的时候偏移了80,一共偏移了85,在第85字节后开始写入22字节的数据,同事覆盖掉以前在那些位置的数据
    ssize_t size_w = write(fd,s,strlen(s));  
    printf("写入的长度为 %ld\n",size_w);     //写入22个字节


    char buffer[800];
    ssize_t size_r = read(fd,buffer,sizeof(buffer));     //读取文件数据,从 5 + 80 + 22 处开始读
    printf("文本最终数据为 %s\n",buffer);
    exit(0);
 }

 

 

 

 

posted @ 2021-02-24 09:41  Sjianzhao  阅读(309)  评论(0)    收藏  举报