第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 錯誤的文件描述符

Golang 錯誤的文件描述符

Go
紅顏莎娜 2021-11-22 18:35:55
嘗試附加到我的 go 例程中的日志文件時,我得到了一個錯誤的文件描述符。write ./log.log: bad file descriptor該文件存在并且具有 666 的權(quán)限。一開始我覺得很好,也許是因?yàn)樗麄兠總€人都試圖同時打開文件。我實(shí)現(xiàn)了一個互斥鎖來嘗試避免這種情況,但遇到了同樣的問題,所以我將其刪除。logCh := make(chan string, 150)go func() {    for {        msg, ok := <-logCh        if ok {            if f, err := os.OpenFile("./log.log", os.O_APPEND, os.ModeAppend); err != nil {                panic(err)            } else {                logTime := time.Now().Format(time.RFC3339)                if _, err := f.WriteString(logTime + " - " + msg); err != nil {                    fmt.Print(err)                }                f.Close()            }        } else {            fmt.Print("Channel closed! \n")            break        }    }}()
查看完整描述

3 回答

?
慕仙森

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個贊

您需要添加O_WRONLY標(biāo)志:


if f, err := os.OpenFile("./log.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend); err != nil { /*[...]*/ }

為了解釋一下,這里是 linux 文檔open:http : //man7.org/linux/man-pages/man2/openat.2.html:


參數(shù)標(biāo)志必須包括以下訪問模式之一:O_RDONLY、O_WRONLY 或 O_RDWR。這些請求分別以只讀、只寫或讀/寫方式打開文件。


如果您檢查/usr/local/go/src/syscall/zerrors_linux_amd64.go:660,您可以看到:


O_RDONLY                         = 0x0

O_RDWR                           = 0x2

O_WRONLY                         = 0x1

所以默認(rèn)情況下你會得到一個只讀的文件描述符。


查看完整回答
反對 回復(fù) 2021-11-22
?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個贊

它對我有用

之前的代碼:

os.OpenFile(fileName, os.O_CREATE|os.O_APPEND, os.ModePerm)

它發(fā)生了錯誤:文件描述符錯誤,

然后我將 os.O_WRONLY 添加到函數(shù)中

之后的代碼:

os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, os.ModePerm)

它沒有出現(xiàn)問題。


查看完整回答
反對 回復(fù) 2021-11-22
?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個贊

這似乎是 windows 和 linux 之間的差異。在 windows 上 os.O_APPEND 意味著寫訪問,如 syscall_windows.go 中的代碼所示。


if mode&O_APPEND != 0 {

    access &^= GENERIC_WRITE

    access |= FILE_APPEND_DATA

}

在 linux 中,openflags 按原樣傳遞給 linux 系統(tǒng)調(diào)用


因此,在 DOS/WINDOWS 中,您不需要像暗示的那樣顯式添加帶有附加標(biāo)志的寫入標(biāo)志。(這是自 DOS 時代以來的默認(rèn)行為)Linux 中的 Go 確實(shí)需要添加額外的標(biāo)志才能工作。


(...但我不應(yīng)該需要這個標(biāo)志,因?yàn)楦郊与[含暗示我想寫。我應(yīng)該向 golang 報(bào)告這個錯誤嗎?)


查看完整回答
反對 回復(fù) 2021-11-22
  • 3 回答
  • 0 關(guān)注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號