关于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); }



浙公网安备 33010602011771号