C語言程序設(shè)計(第8章輸入輸出和文件系統(tǒng))2

字號:

8.2 非緩沖文件系統(tǒng)
     前面介紹的緩沖文件系統(tǒng)是借助文件結(jié)構(gòu)體指針來對文件進行管理,通過文件指針來對文件進行訪問,既可以讀寫字符、字符串、格式化數(shù)據(jù),也可以讀寫二進制數(shù)據(jù)。非緩沖文件系統(tǒng)依賴于操作系統(tǒng),通過操作系統(tǒng)的功能對文件進行讀寫,是系統(tǒng)級的輸入輸出,它不設(shè)文件結(jié)構(gòu)體指針,只能讀寫二進制文件,但效率高、速度快,由于ANSI標(biāo)準(zhǔn)不再包括非緩沖文件系統(tǒng),因此建議大家不要選擇它。本書只作簡單介紹。
    1. 文件的打開與關(guān)閉
    非緩沖文件系統(tǒng)不是ANSI標(biāo)準(zhǔn)定義的,是UNIX型I/O系統(tǒng)的一員,所以,其原型位于io.h文件中。
    打開文件:
    int open(char *fname,int access);
    打開文件名為fname,以access方式訪問:
    access的值為:O_RDONLY 只讀
    O_WRONLY 只寫
    O_RDWR 讀寫
    關(guān)閉文件:
    close(int fd);
    下述程序用UNIX系統(tǒng)打開和關(guān)閉一個文件:
    #include "io.h"
    #include "fcntl.h"
    #include "sys\stat.h"
    main(argc, argv)
    int argc;
    char *argv[]
    {
     int fd;
     if((fd=open(argv[1],O_RDONLY))==-1) /* 以只讀方式打開文件*/
     {
     printf("cannt open file!");
     exit(0);
     }
     printf("file existent!");
     if(close(fd)) printf("error in closing file\n");
    }
    2. 文件的讀寫
     對非緩沖文件系統(tǒng)的讀寫函數(shù)的原型在io.h頭文件中,其調(diào)用形式為:
     int read(int fd,void *buf,int count)
     read( )函數(shù)從fd說明的文件中讀取count個字節(jié)到buf所指向的緩沖區(qū)。函數(shù)的返回值是實際讀寫的字節(jié)數(shù)。
     int write(int fd,void *buf,int count)
     write( )函數(shù)把count個字節(jié)從buf寫入到fd說明的文件中。函數(shù)的返回值是實際寫入的字節(jié)數(shù)。
     下面例子從文件TEST.TST中讀取它的前半100個字節(jié)并放到數(shù)組buffer中。
    #include "io.h"
    #include "stdio.h"
    #include "fcntl.h"
    main( )
    {
     int fd;
     char buffer[100];
     if ((fd=open("TEST.TST",O_RDONLY))==-1) /* 打開文件* /
     {
     printf("cannot open file !\n");
     exit(0);
     }
     if(read(fd,buffer,100)!=100) /*判斷讀寫的字節(jié)數(shù)是否正確*/
     printf("Possible read error.");
    }