中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GoLang?OS包及File類型源碼分析

發布時間:2023-03-17 10:46:13 來源:億速云 閱讀:89 作者:iii 欄目:開發技術

這篇文章主要介紹“GoLang OS包及File類型源碼分析”,在日常操作中,相信很多人在GoLang OS包及File類型源碼分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”GoLang OS包及File類型源碼分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    一、OS包的作用

    os包中的API主要可以幫助我們使用操作系統中的文件系統、權限系統、環境變量、系統進程,以及系統信號。

    對于類Unix的操作系統,其中的一切都可以被看作文件。因此可以利用os.File類型操作的東西很多。

    本篇文章把os.File 類型應用于常規的文件。

    二、os.File類型實現了哪些io包的接口

    os.File擁有的都是指針方法,所以除了空接口以外,它本身沒有實現任何接口。而它的指針類型則實現了很多io代碼包中的接口。

    • *os.File實現了io包中三個最核心的簡單接口:io.Readerio.Writerio.Closer

    • *os.File還實現了另外三個簡單接口:io.ReaderAtio.Seekerio.WriterAt

    • 由于*os.File實現了上面六個簡單接口,所以它順便實現了io包中9個擴展接口中的7個:io.ReadWriterio.ReadCloserio.ReadSeekerio.ReadWriteCloserio.ReadWriteSeekerio.WriteCloserio.WriteSeeker

    由于·*os.File沒有實現簡單接口io.ByteReaderio.RuneReader,所以它沒有實現它沒有實現作為它兩者的擴展接口:io.ByteScannerio.RuneScanner

    所以,os.File可以讀寫文件,并讀取和設定下一次讀寫的起始索引位置。還可以對文件進行關閉。但是,并不能專門地讀取文件的下一個字節,或者寫一個Unicode字符,也不能進行任何的讀回退操作。

    三、創建os.File類型的指針類型

    在os包中,有這樣幾個函數:Create、NewFile、Open和OpenFile。

    3.1 os.Create

    os.Create函數用于根據指定的路徑創建一個新的文件。

    使用這個函數創建的文件,對于操作系統中的所有用戶來說,都是可以讀和寫的。

    • 如果在我們給予os.Create函數的路徑之上,已經存在一個文件,那么該函數會清空現有文件中的全部內容,然后再把它作為第一個結果值返回;

    • 如果給定的路徑的某一級父目錄并不存在,該函數就會返回一個*os.PathError類型的錯誤值,以表示“不存在的文件或目錄“。

    3.2 os.NewFile

    該函數在被調用的時候,需要接受一個代表文件描述符的uintptr類型的值,以及一個用于表示文件名的字符值。

    • 如果給定的文件描述符不是有效的,那么函數將返回nil。否則,它將會返回一個代表了相應文件的File值;

    這個函數的功能并不是創建一個新的文件,而是依據一個已經存在的文件描述符,來新建一個包裝了該文件的File值。

    3.3 os.Open

    os.Open函數會打開一個文件并返回包裝了該文件的File值。然而,該函數只能以只讀模式打開文件。

    換句話說,我們只能從該函數返回的File值中讀取內容,而不能向它寫入任何內容。

    如果調用它的任何一個寫入方法,都會得到一個表示“壞的文件描述符”的錯誤值。

    os.File類型有一個指針方法Fd,它在被調用之后將會返回一個uintptr 類型的值,這個值就代表了當前的File值所持有的那個文件描述符。

    3.4 os.OpenFile

    os.OpenFile其實是os.Openos.Create函數的底層支持,它最為靈活。

    這個函數有3個參數:

    • name:文件路徑;

    • flag:需要施加在文件描述符之上的模式;比如,只讀模式(由os.O_RDONLY)。操作模式

    • perm:代表的也是模式,類型是os.FileMode,是一個基于uint32類型的再定義類型。權限模式。

    操作模式限定了文件的方式,權限模式控制文件的訪問權限。

    四、os.File值的操作模式有哪些

    針對File值的操作模式主要有:只讀模式、只寫模式和讀寫模式。

    • 只讀模式:os.O_RDONLY

    • 只寫模式:os.O_WRONLY

    • 讀寫模式:os.O_RDWR

    更多的操作模式:

    • os.O_APPEDN :寫內容是,追加在現有內容的后面;

    • os.O_CREATE :當給定路徑上的文件不存在時,創建一個新文件;

    • os.O_EXCL:需要和os.O_CREATE一同使用,表示給定的路徑上不能有存在的文件。

    • os.O_SYNC :在打開文件之上實施同步I/O。它會保證讀寫的內容總會與硬盤上的數據保持同步。

    • os.O_TRUNC:如果文件已存在,并且是常規的文件,那么就先清空其中已存在的任何內容。

    多個操作模式是通過按位操作符|組合起來的。

    func Create(name string) (*File, error) {
    	return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
    }
    func Open(name string) (*File, error) {
    	return OpenFile(name, O_RDONLY, 0)
    }

    五、os.OpenFile的第三個表示模式的參數

    os.OpenFile函數的第三個參數perm代表的是權限模式,它的類型是os.FileMode。實際上,os.FileMode能夠代表的不僅是權限模式,還可以代表文件模式(也可以稱為文件種類)。

    os.FileMode是基于uint32類型的再定義類型,包含23個比特位,在這23個比特位,每個比特位都有特定的含義。

    • 如果在最高比特位的二進制數是1,該文件模式就等同于os.ModeDir,也就是說相應的文件是一個目錄。

    • 如果在第26位比特位的二進制數是1,該文件模式就等同于os.ModeNamedPipe,也就是說該文件是一個命名管道。

    os.FileMode只有最低9個比特位才用于表示文件的權限。

    os.FileMode類型的值與os.ModePerm常量(值為0777)做按位與操作,得到的值就表示對應的權限模式。

    這9個比特位,3個為一組,共3組。從高到低,分別表示:文件所有者(創建文件的那個用戶)、文件所屬的用戶組、用戶對該文件的訪問權限。而對于每個組,其中的3個比特位從高到低分別表示:讀權限、寫權限、執行權限。

    某個比特位上是1,表示相應的權限開啟,否則,就表示相應的權限關閉。

    • 八進制整數0777就表示:操作系統中的所有用戶都對當前的文件有讀、寫和執行的權限;

    • 而八進制整數0666則表示:所有用戶都對當前文件有讀和寫的權限,但都沒有執行的權限。

    但要注意,只有在新建文件的時候,這里的第三個參數值才是有效的。在其他情況下,即使我們設置了此參數,也不會對目標文件產生任何的影響。

    到此,關于“GoLang OS包及File類型源碼分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    贞丰县| 策勒县| 西丰县| 高碑店市| 平乐县| 西畴县| 福州市| 收藏| 巴青县| 新晃| 辉南县| 成安县| 武胜县| 新绛县| 铜山县| 静乐县| 庆城县| 西平县| 庄浪县| 瑞安市| 永德县| 清河县| 同德县| 和龙市| 太白县| 常熟市| 资阳市| 曲松县| 固安县| 正阳县| 黔江区| 乌兰县| 宕昌县| 改则县| 北票市| 海林市| 玉龙| 亚东县| 罗甸县| 乡城县| 连州市|