• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-167  評論-8  文章-0  trackbacks-0

            fileno()函數

            功    能:把文件流指針轉換成文件描述符
            相關函數:open, fopen
            表頭文件:#include <stdio.h>
            定義函數:int fileno(FILE *stream)
            函數說明:fileno()用來取得參數stream指定的文件流所使用的文件描述詞
            返回值  :返回和stream文件流對應的文件描述符。如果失敗,返回-1。
            范例:
            #include <stdio.h>
            main()
            {
                 FILE   *fp;
                 int   fd;
                 fp = fopen("/etc/passwd", "r");
                 fd = fileno(fp);
                 printf("fd = %d\n", fd);
                 fclose(fp);
            }

                文件描述詞是Linux編程中的一個術語。當一個文件打開后,系統會分配一部分資源來保存該文件的信息,以后對文件的操作就可以直接引用該部分資源了。文件描述詞可以認為是該部分資源的一個索引,在打開文件時返回。在使用fcntl函數對文件的一些屬性進行設置時就需要一個文件描述詞參數。
                以前知道,當程序執行時,就已經有三個文件流打開了,它們分別是標準輸入stdin,標準輸出stdout和標準錯誤輸出stderr。和流式文件相對應的是,也有三個文件描述符被預先打開,它們分別是0,1,2,代表標準輸入、標準輸出和標準錯誤輸出。
                需要指出的是,上面的流式文件輸入、輸出和文件描述符的輸入輸出方式不能混用,否則會造成混亂。

            ftruncate()函數

            函數功能:改變文件大小

            相關函數:open、truncate
            表頭文件:#include <unistd.h>
            函數原型:int ftruncate(int fd, off_t  length)
            函數說明:ftruncate()會將參數fd指定的文件大小改為參數length指定的大小。參數fd為已打開的文件描述詞,而且必須是以寫入模式打開的文件。如果原來的文件件大小比參數length大,則超過的部分會被刪去
            返 回  值:0、-1
            錯誤原因:errno
                      EBADF     參數fd文件描述詞為無效的或該文件已關閉
                      EINVAL    參數fd為一socket并非文件,或是該文件并非以寫入模式打開

            使用方法:fd一般可以fileno(FILE *fp)獲取,標示文件當前的大小,length則可由用戶定義。此函數一般用在文件初始化或者重新為文件分配空間時。

            注意事項:此函數并未實質性的向磁盤寫入數據,只是分配了一定的空間供當前文件使用。當fd<length時,此時如果使用十六進制編輯工具打開該文件,你會發現文件末尾多了很多00,這就是執行這個函數后的效果。如果發生系統復位或者裝置掉電以后,該函數所產生的作用將被文件系統忽略,也就是說它所分配的空間將不能被識別,文件的大小將會是最后一次寫入操作的區域大小,而非ftruncate分配的空間大小,也就是說,文件大小有可能會被改變。

            解決方法:可以在執行完ftruncate之后,在新空間的末尾寫入一個或以上字節的數據(不為Ox00),這樣新空間則不為空,文件系統會把這部分空間當成這個文件的私有空間處理,而不會出現文件大小改變的錯誤。

            ftruncate函數在文件清空方面作用很大
                對一個文件用讀寫方式打開 fopen("...", "r+");首先讀出文件里面的(9php.com)內容,處理完成后需要重新寫入文件中。在重新寫入的(9php.com)時候需要先清空原來文件里面的(9php.com)內容,如何實現此處的(9php.com)清空?
                原來使用先以讀方式打開,讀入緩沖后關閉文件,然后再以寫打開,這樣做兩遍打開關閉,太浪費時間。
                用ftruncate可以清空文件,如:ftruncate(fileno(fp), 0);
                清空文件后,需要使用rewind或fseek將文件指針移到文件頭。

             

            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xiaoyangger/archive/2010/01/22/5237016.aspx

            posted on 2010-06-14 18:18 老馬驛站 閱讀(4379) 評論(0)  編輯 收藏 引用 所屬分類: linux
            99久久精品午夜一区二区| 亚洲中文字幕无码一久久区| 国内精品久久久久久99蜜桃 | 精品久久久无码人妻中文字幕豆芽| 一本色道久久HEZYO无码| 日韩AV无码久久一区二区| 四虎国产精品免费久久5151| 99久久免费国产精品| 狠狠色丁香婷婷久久综合| 亚洲AV无码一区东京热久久| 久久综合九色综合久99| 精品人妻伦九区久久AAA片69| 热re99久久精品国产99热| 久久久久久精品成人免费图片| 99久久国产综合精品五月天喷水| 国产精品乱码久久久久久软件| 久久久久综合网久久| 东方aⅴ免费观看久久av| 伊人色综合久久天天人守人婷 | 久久精品亚洲日本波多野结衣| 2020最新久久久视精品爱 | 久久久久久久尹人综合网亚洲 | 国产精品免费久久| 国内精品久久久久久久影视麻豆| 国产成人精品久久免费动漫| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 精品久久亚洲中文无码| 国产成人精品综合久久久久| 欧美成人免费观看久久| 亚洲伊人久久成综合人影院 | 亚洲色大成网站www久久九 | 一级女性全黄久久生活片免费| 一本色道久久综合| 精品蜜臀久久久久99网站| 国产精品VIDEOSSEX久久发布| 尹人香蕉久久99天天拍| 久久久精品人妻一区二区三区蜜桃 | .精品久久久麻豆国产精品| 久久精品国产99国产精品| 99精品久久久久久久婷婷| 免费一级欧美大片久久网|