関連記事
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のおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。