golang講解(go語言)標準庫分析之os(6)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Golang標準庫


今天我們講golang標準庫的os包type File struct{},還是廢話少說直接上代碼
(1)os.Create()這個函數是創見一個檔案,函數的原型是func Create(name string) (file *File, err error)輸入的是名稱字串類型,返回的是一個File的指標和一個error
[php]
import (
"fmt"
"os"
"reflect"
)

func main() {
f, _ := os.Create("widuu_2.go")
defer f.Close()
fmt.Println(reflect.ValueOf(f).Type()) //*os.File
}
[/php]
這個函數的原理其實是這樣的OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666) O_RDWR也就是說用讀寫的許可權,O_CREATE然後檔案存在忽略,不存在建立它,O_TRUNC檔案存在截取長度為0,這就解釋了為什麼我們明明有這個檔案,我擦,建立之後哭了~啥都沒有了~~用的時候需謹慎,先判斷檔案是否存在~
(2)os.OpenFile函數的原型是func OpenFile(name string, flag int, perm FileMode) (file *File, err error)要指定檔案許可權和開啟的方式,就是我們上邊所用到的
[php]
import (
"fmt"
"os"
)

func main() {
f, _ := os.OpenFile("10.go", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
defer f.Close()
fmt.Println(f.Stat())
}
[/php]
這個就是上邊的Create()只不過許可權是0777以及下邊的操作等大部分用到OpenFile()

(3)os.Open()這個函數是開啟檔案使用的,函數原型是func Open(name string) (file *File, err error),傳回值就不說了一樣的,它的其實原理是這樣的OpenFile(name, O_RDONLY, 0)以讀檔案的模式開啟
[php]
import (
"fmt"
"os"
"reflect"
)

func main() {
f, _ := os.Open("1.go")
defer f.Close()
}
[/php]
(4)os.Stat()這個是擷取fileinfo的結構描述func Stat(name string) (fi FileInfo, err error)返回了Fileinfo這個結構,我們再前邊也詳細講了
,其實它是怎麼實現的呢?因為我們沒講syscall所以我們就講一個,譬如FileInfo底層擷取fs := &fileStat{name: basename(name)}然後後邊邏輯大家可以看原始碼
[php]
import (
"fmt"
"os"
)

func main() {
f, _ := os.Stat("1.go")
fmt.Println(f.Size())
}
[/php]
(5)os.Fd()返迴文件的控制代碼,函數原型是func (file *File) Fd() uintptr函數是這樣的uintptr(file.fd) 返回的是檔案的控制代碼,控制代碼是什嗎?控制代碼,是整個windows編程的基礎。一個控制代碼是指使用的一個唯一的整數
[php]
import (
"fmt"
"os"
)

func main() {
f, _ := os.Open("1.go")
fmt.Println(f.Fd()) //我的平台控制代碼是228
}
[/php]
(6)os.Pipe()這個函數擷取的函數的讀寫指標,函數原型func Pipe() (r *File, w *File, err error)
[php]
import (
"fmt"
"os"
)

func main() {
r, w, _ := os.Pipe()
fmt.Println(r, w) //&{0xc08402e120} &{0xc08402e180}
}
[/php]
(7)os.NewFile()函數原型是func NewFile(fd uintptr, name string) *File 第一個傳入的是控制代碼,然後是檔案名稱,這個函數並不是真的建立了一個檔案,是建立一個檔案不儲存,然後返迴文件的指標
[php]
import (
"fmt"
"os"
)

func main() {
f, _ := os.Open("ini.go")
defer f.Close()
f1 := os.NewFile(f.Fd(), "ceshi.go") //輸如ini.go的控制代碼
defer f1.Close()
fd, _ := f1.Stat()
fmt.Println(fd.ModTime())//返回的是ini.go的建立時間2013-11-27 09:11:50.2793737 +0800 CST

}
[/php]
(8)(f *File).Chdir()修改工作目錄,函數原型func (f *File) Chdir() error,這個時候f必須是目錄了,但是吧這個不支援windows
[php]
import (
"fmt"
"os"
)

func main() {
dir, _ := os.Getwd()
fmt.Println(dir)
f, _ := os.Open("views")
err := f.Chdir()
if err != nil {
fmt.Println(err)
}
dir1, _ := os.Getwd()
fmt.Println(dir1)
}
[/php]
(9)Chmod(),Chown()都是一樣的,當然大家可以直接用os.Chmod(),os.Chdir()函數來改變

今天也就到這裡,明天我們繼續哈~~~

未經允許,不得轉載本站任何文章:微度網路 » golang講解(go語言)標準庫分析之os(6)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.