以下の内容はhttps://devlights.hatenablog.com/entry/2024/08/02/073000より取得しました。


Goメモ-447 (mkfifoメモ)(1)(create)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

Go側から名前付きパイプ(mkfifo)を扱うことがあったので、忘れない内にメモしておこうと思いました。

今回は名前付きパイプファイルの作成について。

なお、標準ライブラリにある syscall パッケージの Mkfifo() でも行えるのですが

サンプルでは sys/unix の方を使っています。

サンプル

//go:build linux

package main

import (
    "flag"
    "log"
    "os"

    "golang.org/x/sys/unix"
)

var (
    fname string
)

func init() {
    log.SetFlags(0)

    flag.StringVar(&fname, "fname", "", "fifo file name")
    flag.Parse()
}

func main() {
    if err := run(); err != nil {
        log.Fatal(err)
    }
}

func run() (err error) {
    //
    // 名前付きパイプを作成
    //   mkfifoコマンドを実行したのと同じ意味となる
    //
    //   $ mkfifo fname -m0666
    //
    // [REFERENCES]
    //   - https://tldp.org/LDP/lpg/node15.html
    //   - https://linuxcommand.net/mkfifo/
    //
    err = unix.Mkfifo(fname, 0666)
    if err != nil {
        return err
    }

    if fi, err := os.Stat(fname); err == nil {
        if fi.Mode()&os.ModeNamedPipe != 0 {
            log.Println("Named Pipe was created.")
        }
    }

    return nil
}

実行すると以下のようになります。

$ task
task: [build] go build -o app .
task: [run] rm -f ./tmp-fifo
task: [run] ./app -fname ./tmp-fifo
Named Pipe was created.
task: [run] ls -l ./tmp-fifo
prw-r--r-- 1 gitpod gitpod 0 Jul 18 05:09 ./tmp-fifo

ちゃんと名前付きパイプとしてファイルが作成されていますね。

参考情報

6.3 Named Pipes (FIFOs - First In First Out)

Ubuntu Manpage: mkfifo, mkfifoat - FIFOスペシャルファイル(名前付きパイプ)を作成する

Master the Linux ‘mkfifo’ Command: A Comprehensive Guide | by Peter Hou | Medium

Goのおすすめ書籍


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。




以上の内容はhttps://devlights.hatenablog.com/entry/2024/08/02/073000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14