亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 > Linux下文件I/O操作的相關(guān)知識(shí)

      Linux下文件I/O操作的相關(guān)知識(shí)

      時(shí)間: 孫勝652 分享

      Linux下文件I/O操作的相關(guān)知識(shí)

        Linux文件I/O主要指的是文件的輸入輸出,很多初學(xué)者對(duì)文件的I/O不是很了解,Linux文件I/O的操作較多,下面學(xué)習(xí)啦小編就給大家詳細(xì)介紹下Linux文件I/O。

        對(duì)內(nèi)核而言,所以打開(kāi)的文件都通過(guò)文件描述符引用。每個(gè)進(jìn)程都有一些與之關(guān)聯(lián)的文件描述符。文件描述符是一個(gè)非負(fù)整數(shù)。當(dāng)打開(kāi)一個(gè)現(xiàn)有文件或創(chuàng)建一個(gè)新文件時(shí),內(nèi)核向進(jìn)程返回一個(gè)文件描述符。當(dāng)讀或?qū)懸粋€(gè)文件時(shí),使用open或creat返回的文件描述符標(biāo)識(shí)該文件,將其作為參數(shù)傳送給read和write。

        一般有三個(gè)以及打開(kāi)的文件描述符,他們是:

        代碼如下:

        0:標(biāo)準(zhǔn)輸入 STDIN_FILENO

        1:標(biāo)準(zhǔn)輸出 STDOUT_FILENO

        2標(biāo)準(zhǔn)錯(cuò)誤輸出 STDERR_FILENO

        每行后面的符號(hào)常量是依從POSIX而定的。

        open函數(shù)

        代碼如下:

        #include 《sys/types.h》

        #include 《sys/stat.h》

        #include 《fcntl.h》

        int open(const char *pathname, int flags);

        int open(const char *pathname, int flags,mode_t mode);

        pathname是要打開(kāi)或創(chuàng)建文件的名字。

        flag用來(lái)定義打開(kāi)文件所采取的的動(dòng)作,必須調(diào)用以下模式之一

        O_RDONLY, O_WRONLY, O_RDWR分別代表只讀,只寫(xiě),讀寫(xiě)方式打開(kāi)。

        open還可以包括以下可選模式的組合

        O_APPEND:把寫(xiě)入數(shù)據(jù)追加到文件的尾端

        O_CREAT:若文件不存在,則創(chuàng)建它。使用此選項(xiàng)時(shí),需要第三個(gè)參數(shù)mode,用其指定該新文件的訪問(wèn)權(quán)限。

        O_EXCL:如果同時(shí)指定了O_CREAT,而文件存在,則會(huì)出錯(cuò)。用此可以測(cè)試一個(gè)文件是否存在,如果存在,則創(chuàng)建文件,這使測(cè)試和創(chuàng)建兩者成為一個(gè)原子操作。

        O_TRUNC: 如果此文件存在,而且為只寫(xiě)或讀寫(xiě)成功打開(kāi),則將其長(zhǎng)度截為0。

        open返回的文件描述符一定是最小的未用描述符數(shù)值。這一點(diǎn)被某些應(yīng)用程序用在標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出或標(biāo)準(zhǔn)錯(cuò)誤輸出上。如,一個(gè)程序關(guān)閉了自己的標(biāo)準(zhǔn)輸出,然后再次調(diào)用open,文件描述符1就會(huì)被調(diào)用,并且標(biāo)準(zhǔn)輸出將被有效的重定向到另一個(gè)文件或設(shè)備。

        POSIX規(guī)范還標(biāo)準(zhǔn)化了一個(gè)creat調(diào)用,此函數(shù)等效于

        open(pathname,O_WONLY |O_CREAT | O_TRUNC, mode);

        close函數(shù)

        #include 《unistd.h》

        int close(int fd);

        close調(diào)用終止一個(gè)文件描述符fd與對(duì)應(yīng)文件之間的關(guān)聯(lián)。文件描述符被釋放后并能重新使用。close調(diào)用成功返回0,出錯(cuò)返回-1.

        關(guān)閉一個(gè)文件時(shí)會(huì)釋放該進(jìn)程加在文件上的所有記錄鎖。當(dāng)一個(gè)進(jìn)程終止時(shí),內(nèi)核自動(dòng)關(guān)閉它所有打開(kāi)的文件。

        lseek函數(shù)

        每個(gè)打開(kāi)的文件都有一個(gè)與其相關(guān)聯(lián)的”當(dāng)前文件偏移量”。按系統(tǒng)默認(rèn)情況,當(dāng)打開(kāi)一個(gè)文件時(shí),除非指定O_APPEND選項(xiàng),否則該偏移量被設(shè)置為0。lseek可以為一個(gè)打開(kāi)的文件設(shè)置偏移量。

        代碼如下:

        #include 《sys/types.h》

        #include 《unistd.h》

        off_t lseek(int fd, off_t offset, intwhence);

        offset用來(lái)指定位置,whence參數(shù)定義該偏移值的用法。whence可取以下值:

        代碼如下:

        SEEK_SET: The offset is set to offset bytes.

        SEEK_CUR: The offset is set to its current locationplus offset bytes.

        SEEK_END: The offset is set to the size of the fileplus offset bytes.

        成功調(diào)用返回從文件頭到文件指針被設(shè)置處的字節(jié)偏移值,失敗返回-1。參數(shù)offset定義在《sys/types.h》中。

        當(dāng)偏移量大于文件長(zhǎng)度時(shí),出現(xiàn)空洞,空洞不占用存儲(chǔ)區(qū)。

        read函數(shù)

        代碼如下:

        #include 《unistd.h》

        ssize_t read(int fd, void *buf, size_tcount);

        將與文件描述符fd關(guān)聯(lián)的文件中讀入count個(gè)字符放到buf中。返回讀入的字節(jié)數(shù),它可能小于請(qǐng)求的字節(jié)數(shù)。如果read調(diào)用返回0,就表示未讀入任何數(shù)據(jù),已到達(dá)了文件尾。返回-1,就表示出錯(cuò)。

        write函數(shù)

        代碼如下:

        #include 《unistd.h》

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

        把緩沖區(qū)buf的前count個(gè)字節(jié)寫(xiě)入與文件描述符fd相關(guān)聯(lián)的文件中。返回實(shí)際寫(xiě)入的字節(jié)數(shù),通常與count值相同;否則表示出錯(cuò)。出錯(cuò)的一個(gè)常見(jiàn)原因是:磁盤(pán)已寫(xiě)滿,或者超出了一個(gè)給定進(jìn)程的文件長(zhǎng)度限制。

      312210