• <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  評(píng)論-8  文章-0  trackbacks-0

            fileno()函數(shù)

            功    能:把文件流指針轉(zhuǎn)換成文件描述符
            相關(guān)函數(shù):open, fopen
            表頭文件:#include <stdio.h>
            定義函數(shù):int fileno(FILE *stream)
            函數(shù)說(shuō)明:fileno()用來(lái)取得參數(shù)stream指定的文件流所使用的文件描述詞
            返回值  :返回和stream文件流對(duì)應(yīng)的文件描述符。如果失敗,返回-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編程中的一個(gè)術(shù)語(yǔ)。當(dāng)一個(gè)文件打開(kāi)后,系統(tǒng)會(huì)分配一部分資源來(lái)保存該文件的信息,以后對(duì)文件的操作就可以直接引用該部分資源了。文件描述詞可以認(rèn)為是該部分資源的一個(gè)索引,在打開(kāi)文件時(shí)返回。在使用fcntl函數(shù)對(duì)文件的一些屬性進(jìn)行設(shè)置時(shí)就需要一個(gè)文件描述詞參數(shù)。
                以前知道,當(dāng)程序執(zhí)行時(shí),就已經(jīng)有三個(gè)文件流打開(kāi)了,它們分別是標(biāo)準(zhǔn)輸入stdin,標(biāo)準(zhǔn)輸出stdout和標(biāo)準(zhǔn)錯(cuò)誤輸出stderr。和流式文件相對(duì)應(yīng)的是,也有三個(gè)文件描述符被預(yù)先打開(kāi),它們分別是0,1,2,代表標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出。
                需要指出的是,上面的流式文件輸入、輸出和文件描述符的輸入輸出方式不能混用,否則會(huì)造成混亂。

            ftruncate()函數(shù)

            函數(shù)功能:改變文件大小

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

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

            注意事項(xiàng):此函數(shù)并未實(shí)質(zhì)性的向磁盤(pán)寫(xiě)入數(shù)據(jù),只是分配了一定的空間供當(dāng)前文件使用。當(dāng)fd<length時(shí),此時(shí)如果使用十六進(jìn)制編輯工具打開(kāi)該文件,你會(huì)發(fā)現(xiàn)文件末尾多了很多00,這就是執(zhí)行這個(gè)函數(shù)后的效果。如果發(fā)生系統(tǒng)復(fù)位或者裝置掉電以后,該函數(shù)所產(chǎn)生的作用將被文件系統(tǒng)忽略,也就是說(shuō)它所分配的空間將不能被識(shí)別,文件的大小將會(huì)是最后一次寫(xiě)入操作的區(qū)域大小,而非ftruncate分配的空間大小,也就是說(shuō),文件大小有可能會(huì)被改變。

            解決方法:可以在執(zhí)行完ftruncate之后,在新空間的末尾寫(xiě)入一個(gè)或以上字節(jié)的數(shù)據(jù)(不為Ox00),這樣新空間則不為空,文件系統(tǒng)會(huì)把這部分空間當(dāng)成這個(gè)文件的私有空間處理,而不會(huì)出現(xiàn)文件大小改變的錯(cuò)誤。

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

             

            本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/xiaoyangger/archive/2010/01/22/5237016.aspx

            posted on 2010-06-14 18:18 老馬驛站 閱讀(4352) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): linux
            久久久免费观成人影院| 国产精品久久久久久一区二区三区| 2020久久精品亚洲热综合一本| 久久婷婷五月综合97色直播| 97久久国产亚洲精品超碰热| 精品久久久久久无码不卡| 国产精品成人久久久久三级午夜电影 | 久久久受www免费人成| 久久九九全国免费| AAA级久久久精品无码区| 中文精品久久久久国产网址| 国产精品免费久久久久电影网| 久久九九有精品国产23百花影院| 久久久老熟女一区二区三区| A级毛片无码久久精品免费| 久久亚洲国产成人影院| 伊人久久久AV老熟妇色| 97久久精品人妻人人搡人人玩| 久久精品国产半推半就| 国产成人香蕉久久久久| 亚洲国产成人精品91久久久| 2020久久精品亚洲热综合一本| 中文字幕无码免费久久| 久久丫精品国产亚洲av不卡| 久久久女人与动物群交毛片| 国产美女久久精品香蕉69| 国产精品久久成人影院| 久久综合日本熟妇| 7777精品久久久大香线蕉| 99久久精品国产一区二区三区| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久91精品久久91综合| 91精品观看91久久久久久 | 国产精品久久久久蜜芽| 四虎国产精品免费久久| 老色鬼久久亚洲AV综合| 久久精品无码免费不卡| 久久国产精品99精品国产| 久久久噜噜噜久久中文字幕色伊伊| 国产精品无码久久久久久| 国产亚洲色婷婷久久99精品91 |