等到IO缓冲区完全写入GoLang

时间:2018-05-29 17:00:48

标签: go buffer

我正在使用打印机(ESC POS)在/ dev / usb / lp0上写入数据时打印文本

简化代码是:

package main

import (
    "bufio"
    "os"
)

func main() {

    f, err := os.Create("/dev/usb/lp0")

    if err != nil {
        panic(err)
    }
    defer f.Close()

    w := bufio.NewWriter(f)

    w.Write([]byte("\x1B@"))
    w.WriteString("test-1\n")
    w.WriteString("test-2\n")
    w.WriteString("test-3\n")
    w.WriteString("test-4\n")
    w.WriteString("test-5\n")
    w.WriteString("test-6\n")
    w.WriteString("test-7\n")
    w.WriteString("test-8\n")
    w.WriteString("test-9\n")

    w.Flush()
    f.Sync()
}

并且大部分时间都没有打印最后一行,除非我在最后添加一个计时器。

我认为我已正确关闭所有内容,所以不确定这里发生了什么......如果我写一个文件,它可以正常运行,运气好吗?

提前谢谢你,我昨晚花了这么多,这让我发疯了。)

编辑:错误处理代码(f.Sync()实际上失败了,我删除了它)

    package main

import (
    "bufio"
    "os"
)

func main() {

    f, err := os.Create("/dev/usb/lp0")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    w := bufio.NewWriter(f)

    _, err = w.Write([]byte("\x1B@"))
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-1\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-2\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-3\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-4\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-5\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-6\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-7\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-8\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-9\n")
    if err != nil {
        panic(err)
    }
    err = w.Flush()
    if err != nil {
        panic(err)
    }
}

0 个答案:

没有答案
相关问题