read/write系统调用

/*拷贝文件内容实例
read系统调用、write系统调用
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);//将数据写到一个文件中

一、read、write

一旦有了与一个打开文件描述符像连的文件描述符,只要该文件是用O_RDONLY或O_RDWD标志打开的,就可以用read()系统调用从该文件读取字节

ssize_t   read(int fd, void* buf, size_t count);

fd: 要读取得文件描述符。  buf: 指向内存块的指针,从文件读取来的字节放到这个内存块中。   count: 从该文件读取到buf中的字节数

返回值:若出错,返回-1;读文件结束,返回0;否则返回从该文件复制到规定缓冲区中的字节数。

 

ssize_t  write(int fd, const void * buf ,size_t count);

fd:要写入文件的描述符。  buf: 指向内存块的指针。 count: 要写入文件的字节数

返回值:如果出现错误,返回-1;如果写入成功,则返回写入到文件的字节数。

*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<errno.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#define ERR_EXIT(m)  (perror(m),exit(EXIT_FAILURE))
#define ERR_EXIT(m)\
    do\
    {\
        perror(m);\
        exit(EXIT_FAILURE);\
    }while(0)  //宏要求一条语句
int main(int argc,char *argv[])//  ./0703_5  src  dest
{
    int infd;
    int outfd;
    if(argc!=3)
    {
        fprintf(stderr,"Usage %s src dest\n",argv[0]);
        exit(EXIT_FAILURE);
    }
    if((infd=open(argv[1],O_RDONLY))==-1)
            ERR_EXIT("open src error");
    if((outfd=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0644))==-1)
            ERR_EXIT("open dest error");

    char buf[1024];//不一定读到1024,每次读后,数据指针都会偏移
    ssize_t nread;//头文件<sys/types.h>
    while((nread=read(infd,buf,1024))>0) //读到文件末尾返回0跳出循环
    {
        write(outfd,buf,nread);//int fsync(int fd) 。不一定读到磁盘文件中了,可以用fsync 同步到磁盘中
    }
    close(infd);
    close(outfd);
    return 0;
}

posted on 2018-01-13 20:18  wsw_seu  阅读(1513)  评论(0编辑  收藏  举报

导航