Linux應用開發(四):linux檔案、時間編程

來源:互聯網
上載者:User

一、雞肋

  1、linux中檔案編程有兩種方法:

     (1)linux系統調用

     (2)C語言庫函數

    兩者的區別就在於,(1)是依賴於linux作業系統的,而(2)由於是標準介面,同樣的程式可以運行在不同的作業系統中

 

二、linux系統調用方式的檔案編程:

  1、建立檔案函數:int creat(const char * filename,mode_t mode)

                   filename,要建立的檔案名稱,需要包含路徑,預設為當前路徑

                   mode_t mode,建立模式,常見的模式有:

                    
(1)S_IRUSR 可讀 (2)S_IWURS 可寫(3)S_IXUSR 可執行(4)S_IRWXU 可讀可寫可執行,r、w、x就是linux系統中的檔案屬性,usr表示user,

                      除了可以使用上述宏以外,還可以直接使用數字來表示檔案的存取權限:

                     (1)1:可執行(2)2:可寫(3)4:可讀,(4)數字和:綜合確定許可權,eg:3=1+2,所以表示可寫可執行(5)0:無任何許可權

  2、檔案描述符,在linux系統中,系統會給每一個“開啟”的檔案分配一個檔案描述符,從本質上講,這個檔案描述符就是一個非負整數(就像社會安全號碼一樣,它的本質就是一串數字,但它代表的含義遠超過數字)。這串數字,由系統來分配,它的取值範圍是 0~OPEN_MAX,現在大部分的系統OPEN_MAX的值均為1023,即允許一個進程同時開啟1024個檔案

  3、開啟檔案函數:(1)2個參數的開啟函數 ,int open(const char * pathname,int flags)

                   
(2) 3個參數的開啟函數,int open(const char * pathname,int flags,mode_t mode)

     參數說明:

     pathname:要開啟的檔案名稱(需要包含路徑,預設值是當前路徑)

     flags:開啟標誌,常見的開啟標誌

       
O_RDONLY:read only,唯讀方式開啟,

       
O_WRONLY:write only,唯寫方式開啟,

       
O_RDWR:read write,讀寫方式開啟,

       
O_APPEND:追加方式開啟,

       
O_CREAT:建立一個檔案,

       
O_NOBLOCK:非阻塞方式開啟

      重點看一下O_CREATE標誌,如果我們使用O_CREATE標誌來開啟函數,則使用的函數是:

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

       此時,需要指定mode來表示檔案的存取權限,許可權表示方式見1,如果flags裡面沒有O_CREAT就使用2個函數的開啟函數。

    4、檔案關閉:int close(int fd);

       fd:檔案描述符,fd 就是開啟檔案時系統分配的檔案描述符

    5、讀檔案函數:int read(int fd,const void * buf,size_t length);

       怎麼用:

           
(1)從檔案描述符 fd 指定的檔案中去讀取length個位元組到buf指向的緩衝區

           
(2)傳回值為實際讀取的位元組數,(所為的實際是指,當我們想從fd檔案中讀取length個位元組,但實際上檔案裡面只有<length 個位元組,則返回的int是實際讀取的位元組數)

    6、寫檔案函數:int write(int fd,const void * buf,size_t length);

        怎麼用:

             (1)把buf指向的緩衝區的length個位元組寫到fd指向的檔案中去

             (2)傳回值為實際寫入的位元組數

    7、檔案定位函數:int lseek(int fd,offset_t offset,int whence)

         怎麼用:

             (1)將檔案讀寫指標相對whence開始移動offset個位元組

             (2)傳回值為:檔案指標相對於檔案頭的位置。

             (3)whence 是基準點,可以使用下述值:

                  SEEK_SET : 基準點為檔案頭

                  SEEK_CUR : 基準點為檔案指標的當前位置

                  SEEK_END : 基準點為檔案末尾

             (4)當offset去負值時,表示向前移動

     8、檔案訪問判斷:有時我們需要判斷檔案是否可以進行某種操作(如:讀、寫、可執行),這時可以用access函數

             int access(const char * pathname,int mode)

                 pathname:檔案名稱

                 mode:要判斷的存取權限,可以使用下面的許可權或他們的組合

                     (1)R_OK,檔案可讀(2)W_OK,檔案可寫(3)X_OK,檔案可執行(4)F_OK,檔案存在

                 傳回值:測試成功,函數返回0,否則有一個條件不符合返回-1

總結,像資料中的4大操作增刪改查一樣,檔案操作的的 4大操作就是:建立、讀寫、定位和關閉,掌握好這4個操作就可以了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.