學習筆記:在windows和linux下寫檔案的些許不同

3zheng發表於2017-12-21

以下程式碼在跨平臺時存在的一個小陷阱,windows下可以正常跑,linux下fp.Write(b)會報錯“bad file descriptor”

package main

import (
    "log"
    "os"
)

func main() {
    fp, err := os.OpenFile("1.log", os.O_APPEND|os.O_CREATE, 0666)
    if err != nil {
        return
    }
    defer fp.Close()
    b := []byte("1234567890")
    n, err := fp.Write(b)
    if err != nil {
        log.Println("error:", err)
    }
    log.Println("n = ", n)
}

linux也要正常執行得把os.OpenFile(fileName, os.O_APPEND|os.O_CREATE, 0666)改成 os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666)或者os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)

因為我是根據C的寫檔案的方式來寫的,以為os.O_APPEND|os.O_CREATE作為C的open(filename, "a"),然而實際上os.O_APPEND|os.O_CREATE|os.O_WRONLY才是C的open(filename, "a")

和我一樣從C/C++轉過來的gopher小夥伴千萬注意啊

相關文章