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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM