pread与pwrite

来源:互联网 发布:pid控制算法公式详解 编辑:程序博客网 时间:2024/05/20 13:04

函数原型
Ssize_t pread(int fd,void *buf,size_t nbytes,off_t offset);
Ssize_t write(int fd,const void *buf,size_t nbytes,off_t offset);
调用pread相当于调用lseet后再调用read函数,其区别是调用pread时无法中断其定位和读操作
不更新当前文件偏移量。
pread参数
(1) fd:要读取数据的文件描述符
(2) buf:数据缓存区指针,存放读取出来的数据
(3) count:读取数据的字节数
(4) offset:读取的起始地址的偏移量,读取地址=文件开始+offset。注意,执行后,文件偏移指针不变
Pwrite参数
(1) fd:要写入数据的文件描述符
  (2) buf:数据缓存区指针,存放要写入文件中的数据
  (3) count:写入文件中的数据的字节数
  (4) offset:写入起始地址的偏移量,写入地址=文件开始+offset。注意,执行后,文件偏移指针不变
  使用案例
  

#include<unistd.h>#include<string.h>#include<fcntl.h>#include<stdlib.h>#include<stdio.h>#include<errno.h>#define BUFERSIZE 4096int main(int argc,char*argv[]){    if(argc<3){        perror("input filename");        exit(0);        }    int fd,fdw;    char buf[BUFERSIZE];    int n;    int lk;    int seek =0;    fd = open(argv[1],O_RDWR|O_CREAT,0777);    fdw = open(argv[2],O_RDWR|O_CREAT,0777);    if(fd<0||fdw<0)        {            perror("open");            exit(1);        }    //  lseek(fd,50,SEEK_SET);        while((n=pread(fd,buf,BUFERSIZE,seek))>0){            if(pwrite(fdw,buf,n,seek)<0)                {                    perror("write1");                }                    seek+=n;        }    printf("\n");        return 0;}
0 0
原创粉丝点击