歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux系統編程之文件與IO:系統調用read和write

Linux系統編程之文件與IO:系統調用read和write

日期:2017/3/1 9:55:04   编辑:Linux編程
  • read系統調用

    一旦有了與一個打開文件描述相連的文件描述符,只要該文件是用O_RDONLY或O_RDWR標志打開的,就可以用read()系統調用從該文件中讀取字節

    函數原型:

    #include <unistd.h>

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

    參數

    fd :想要讀的文件的文件描述符

    buf : 指向內存塊的指針,從文件中讀取來的字節放到這個內存塊中

    count : 從該文件復制到buf中的字節個數

    返回值

    如果出現錯誤,返回-1

    讀文件結束,返回0

    否則返回從該文件復制到規定的緩沖區中的字節數

    否則返回從該文件復制到規定的緩沖區中的字節數

  • write系統調用

    用write()系統調用將數據寫到一個文件中

    函數原型:

    #include <unistd.h>

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

    函數參數:

    -fd:要寫入的文件的文件描述符

    -buf:指向內存塊的指針,從這個內存塊中讀取數據寫入 到文件中

    -count:要寫入文件的字節個數

    返回值

    如果出現錯誤,返回-1

    注:write並非真正寫入磁盤,而是先寫入內存緩沖區,待緩沖區滿或進行刷新操作後才真正寫入磁盤,若想實時寫入磁盤可調用

    int fsync(int fd);或在open時flags加上O_SYNC

  • 利用read和write進行文件拷貝

    程序代碼:

  • #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    
    #define EXIT_ERR(m) \
    do{\
        perror(m);\
        exit(EXIT_FAILURE);\
    }while(0)
    int main(int argc, char **argv)
    {
        int infd;
        int outfd;
        if(argc != 3){
            fprintf(stderr,"usage:%s src des\n",argv[0]);
            exit(EXIT_FAILURE);
        }
        if((infd = open(argv[1],O_RDONLY)) == -1)
            EXIT_ERR("open error");
        if((outfd = open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0644)) == -1)
            EXIT_ERR("OPEN ERROR");
        char buf[1024];
        int n;
        while((n = read(infd, buf, 1024)) > 0 ){
            write(outfd, buf, n);
        }
        close(infd);
        close(outfd);
        return 0;
    }

測試結果:

Copyright © Linux教程網 All Rights Reserved