日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
學(xué)C51的基礎(chǔ)7《 文件的輸入輸出函數(shù) 》 作者[cmh]©;
學(xué)C51的基礎(chǔ)7《 文件的輸入輸出函數(shù) 》 作者[cmh]©;
 更新時(shí)間:2008-8-17 16:34:13  點(diǎn)擊數(shù):48
【字體: 字體顏色

    例12

     #include<stdio.h>
     main()
     {
          char *s, m[20];
          int i;
          FILE  *fp;
          fp=fopen("test.dat", "r");    /*打開文字文件只讀*/
          fgets(s, 24, fp);             /*從文件中讀取23個(gè)字符*/
          printf("%s", s);              /*輸出所讀的字符串*/
          fscanf(fp, "%d", &i);         /*讀取整型數(shù)*/
          printf("%d", i);              /*輸出所讀整型數(shù)*/
          putchar(fgetc(fp));           /*讀取一個(gè)字符同時(shí)輸出*/
          fgets(m, 17, fp);             /*讀取16個(gè)字符*/
          puts(m);                      /*輸出所讀字符串*/
          fclose(fp);                   /*關(guān)閉文件*/
          getch();                      /*等待任一鍵*/
     }

    運(yùn)行后屏幕顯示:

    Your score of TOEFL is: 617
    That''s good news

    如果將上例中fscanf(fp, "%d", &i)改為fscanf(fp, "%s", m), 再將其后的輸出語(yǔ)句改為printf("%s", m), 則可得出同樣的
結(jié)果。由此可見Turbo C2. 0 中只要是讀文字文件, 則不論是字符還是數(shù)字都將按其ASCII值處理。 另外還要說(shuō)明的一點(diǎn)就是
fscanf()函數(shù)讀到空白符時(shí), 便自動(dòng)結(jié)束,在使用時(shí)要特別注意。

    3. 文件的隨機(jī)讀寫
    有時(shí)用戶想直接讀取文件中間某處的信息, 若用文件的順序讀寫必須從文件頭開始直到要求的文件位置再讀, 這顯然不方便。
Turbo C2.0提供了一組文件的隨機(jī)讀寫函數(shù), 即可以將文件位置指針定位在所要求讀寫的地方直接讀寫。
    文件的隨機(jī)讀寫函數(shù)如下:

    int fseek (FILE *stream, long offset, int fromwhere);
    int fread(void *buf, int size, int count, FILE *stream);
    int fwrite(void *buf, int size, int count, FILE *stream);
    long ftell(FILE *stream);

    fseek()函數(shù)的作用是將文件的位置指針設(shè)置到從fromwhere開始的第offset字節(jié)的位置上, 其中fromwhere是下列幾個(gè)宏定義
之一:
    文件位置指針起始計(jì)算位置fromwhere
━━━━━━━━━━━━━━━━━━━━━━━━━━━
    符號(hào)常數(shù)        數(shù)值           含義
───────────────────────────
    SEEK_SET          0        從文件開頭
    SEEK_CUR          1        從文件指針的現(xiàn)行位置
    SEEK_END          2        從文件末尾
━━━━━━━━━━━━━━━━━━━━━━━━━━━
    offset是指文件位置指針從指定開始位置(fromwhere指出的位置)跳過(guò)的字節(jié)數(shù)。它是一個(gè)長(zhǎng)整型量, 以支持大于64K字節(jié)的
文件。fseek()函數(shù)一般用于對(duì)二進(jìn)制文件進(jìn)行操作。
    當(dāng)fseek()函數(shù)返回0時(shí)表明操作成功, 返回非0表示失敗。
    下面程序從二進(jìn)制文件test_b.dat中讀取第8個(gè)字節(jié)。

    例13:

     #include<stdio.h>
     main()
     {
          FILE *fp;
          if((fp=fopen("test_b.dat", "rb"))==NULL)
            {
              printf("Can''t open file");
              exit(1);
            }
          fseek(fp, 8. 1, SEEK_SET);
          fgetc(fp);
          fclose(fp);
     }

    fread()函數(shù)是從文件中讀count個(gè)字段, 每個(gè)字段長(zhǎng)度為size個(gè)字節(jié), 并把它們存放到buf指針?biāo)傅木彌_器中。
    fwrite()函數(shù)是把buf指針?biāo)傅木彌_器中, 長(zhǎng)度為size個(gè)字節(jié)的count個(gè)字段寫到stream指向的文件中去。
    隨著讀和寫字節(jié)數(shù)的增大, 文件位置指示器也增大, 讀多少個(gè)字節(jié), 文件位置指示器相應(yīng)也跳過(guò)多少個(gè)字節(jié)。讀寫完畢函數(shù)返
回所讀和所寫的字段個(gè)數(shù)。
    ftell()函數(shù)返回文件位置指示器的當(dāng)前值,  這個(gè)值是指示器從文件頭開始算起的字節(jié)數(shù), 返回的數(shù)為長(zhǎng)整型數(shù), 當(dāng)返回-1
時(shí), 表明出現(xiàn)錯(cuò)誤。
    下面程序把一個(gè)浮點(diǎn)數(shù)組以二進(jìn)制方式寫入文件test_b.dat中。

    例14:

     #include <stdio.h>
     main()
     {
          float f[6]={3.2, -4.34, 25.04, 0.1, 50.56, 80.5}; /*定義浮點(diǎn)數(shù)組并初始化*/
          int i;
          FILE *fp;
          fp=fopen("test_b.dat", "wb");                     /*創(chuàng)建一個(gè)二進(jìn)制文件只寫*/
          fwrite(f, sizeof(float), 6, fp);                  /*將6個(gè)浮點(diǎn)數(shù)寫入文件中*/
          fclose(fp);                                       /*關(guān)閉文件*/
     }

    下面例子從test_b.dat文件中讀100個(gè)整型數(shù), 并把它們放到dat數(shù)組中。

    例15:

     #include <stdio.h>
     main()
     {
          FILE *fp;
          int dat[100];
          fp=fopen("test_b.dat", "rb");                    /*打開一個(gè)二進(jìn)制文件只讀*/
          if(fread(dat, sizeof(int), 100, fp)!=100)        /*判斷是否讀了100個(gè)數(shù)*/
            {
               if(feof(fp))
                 printf("End of file");                    /*不到100個(gè)數(shù)文件結(jié)束*/
               else
                 printf("Read error");                     /*讀數(shù)錯(cuò)誤*/
          fclose(fp);                                      /*關(guān)閉文件*/
     }

    注意:
    當(dāng)用標(biāo)準(zhǔn)文件函數(shù)對(duì)文件進(jìn)行讀寫操作時(shí), 首先將所讀寫的內(nèi)容放進(jìn)緩沖區(qū), 即寫函數(shù)只對(duì)輸出緩沖區(qū)進(jìn)行操作, 讀函數(shù)只對(duì)
輸入緩沖區(qū)進(jìn)行操作。例如向一個(gè)文件寫入內(nèi)容, 所寫的內(nèi)容將首先放在輸出緩沖區(qū)中, 直到輸出緩沖區(qū)存滿或使用fclose()函數(shù)
關(guān)閉文件時(shí), 緩沖區(qū)的內(nèi)容才會(huì)寫入文件中。 若無(wú)fclose() 函數(shù), 則不會(huì)向文件中存入所寫的內(nèi)容或?qū)懭氲奈募䞍?nèi)容不全。有一
個(gè)對(duì)緩沖區(qū)進(jìn)行刷新的函數(shù), 即fflush(), 其調(diào)用格式為:

    int fflush(FILE *stream);

    該函數(shù)將輸出緩沖區(qū)的內(nèi)容實(shí)際寫入文件中, 而將輸入緩沖區(qū)的內(nèi)容清除掉。

    4. feof()和rewind()函數(shù)
    這兩個(gè)函數(shù)的調(diào)用格式為:

     int feof(FILE *stream);
     int rewind(FILE *stream);

    feof()函數(shù)檢測(cè)文件位置指示器是否到達(dá)了文件結(jié)尾,  若是則返回一個(gè)非0值, 否則返回0。這個(gè)函數(shù)對(duì)二進(jìn)制文件操作特別
有用, 因?yàn)槎M(jìn)制文件中, 文件結(jié)尾標(biāo)志EOF也是一個(gè)合法的二進(jìn)制數(shù), 只簡(jiǎn)單的檢查讀入字符的值來(lái)判斷文件是否結(jié)束是不行的。
如果那樣的話, 可能會(huì)造成文件未結(jié)尾而被認(rèn)為結(jié)尾, 所以就必須有feof()函數(shù)。
    下面的這條語(yǔ)句是常用的判斷文件是否結(jié)束的方法。

     while(!feof(fp))
        fgetc(fp);

    while為循環(huán)語(yǔ)句, 將在下面介紹。
    rewind()函數(shù)用于把文件位置指示器移到文件的起點(diǎn)處, 成功時(shí)返回0, 否則, 返回非0值。

    1.2.2  非標(biāo)準(zhǔn)文件函數(shù)
    這類函數(shù)最早用于UNIX操作系統(tǒng), ANSI標(biāo)準(zhǔn)未定義, 但有時(shí)也經(jīng)常用到, DOS 3.0以上版本支持這些函數(shù)。它們的頭文件為
io.h。

    一、文件的打開和關(guān)閉

    1. open()函數(shù)
    open()函數(shù)的作用是打開文件, 其調(diào)用格式為:

     int open(char *filename, int access);

    該函數(shù)表示按access的要求打開名為filename的文件, 返回值為文件描述字, 其中access有兩部分內(nèi)容: 基本模式和修飾符,
兩者用" "("或")方式連接。修飾符可以有多個(gè), 但基本模式只能有一個(gè)。access的規(guī)定如表3-2。

               表3-2  access的規(guī)定
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
基本模式    含義    修飾符         含  義
────────────────────────────
O_RDONLY    只讀   O_APPEND   文件指針指向末尾
O_WRONLY    只寫   O_CREAT    文件不存在時(shí)創(chuàng)建文件,
                              屬性按基本模式屬性
O_RDWR      讀寫   O_TRUNC    若文件存在, 將其長(zhǎng)度
                              縮為0, 屬性不變
                   O_BINARY   打開一個(gè)二進(jìn)制文件
                   O_TEXT     打開一個(gè)文字文件
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    open()函數(shù)打開成功, 返回值就是文件描述字的值(非負(fù)值), 否則返回-1。

    2. close()函數(shù)
    close()函數(shù)的作用是關(guān)閉由open()函數(shù)打開的文件, 其調(diào)用格式為:

     int close(int handle);

    該函數(shù)關(guān)閉文件描述字handle相連的文件。

    二、讀寫函數(shù)

    1. read()函數(shù)
    read()函數(shù)的調(diào)用格式為:

     int read(int handle, void *buf, int count);

    read()函數(shù)從handle(文件描述字)相連的文件中, 讀取count個(gè)字節(jié)放到buf所指的緩沖區(qū)中, 返回值為實(shí)際所讀字節(jié)數(shù), 返回
-1表示出錯(cuò)。返回0 表示文件結(jié)束。

    2. write()函數(shù)
    write()函數(shù)的調(diào)用格式為:
     int write(int handle, void *buf, int count);
    write()函數(shù)把count個(gè)字節(jié)從buf指向的緩沖區(qū)寫入與handle相連的文件中, 返回值為實(shí)際寫入的字節(jié)數(shù)。

    三、隨機(jī)定位函數(shù)

    1. lseek()函數(shù)
    lseek()函數(shù)的調(diào)用格式為:

     int lseek(int handle, long offset, int fromwhere);

    該函數(shù)對(duì)與handle相連的文件位置指針進(jìn)行定位, 功能和用法與fseek() 函數(shù)相同。

    2. tell()函數(shù)
    tell()函數(shù)的調(diào)用格式為:

     long tell(int handle);

    該函數(shù)返回與handle相連的文件現(xiàn)生位置指針, 功能和用法與ftell()相同。
  • 上一篇: 學(xué)C51的基礎(chǔ) 8 《 控制流程語(yǔ)句 》 作者[cmh]©
  • 下一篇: 學(xué)C51的基礎(chǔ)6 《 輸入輸出函數(shù)及控制流程語(yǔ)句 》 作者[cmh]©;
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1