我已经深入研究os.OpenFile
和net.Listen
的调用堆栈,以查看是否可以使用os.OpenFile
制作UNIX域套接字。以下是我的尝试。但是,在跟踪了两个调用堆栈(os.OpenFile
和net.Listen
)之后,我仍然感到困惑。下面的代码显然不会从文件中读取,而是将数据存储到文件系统中。
os.OpenFile
实现UNIX域套接字? os.ModeSocket
不能与os.OpenFile
一起使用来创建UNIX套接字,它的目的是什么?package main
import (
"fmt"
"log"
"os"
)
func main() {
sock, err := os.OpenFile("f.sock", os.O_RDWR|os.O_CREATE, os.ModeSocket|os.ModePerm)
defer sock.Close()
if err != nil {
log.Panic(err)
}
n, err := sock.WriteString("hello\n")
if err != nil {
fmt.Println(err)
} else {
fmt.Println(n)
}
b := make([]byte, 10)
n, err = sock.Read(b)
fmt.Println(n)
if err != nil {
fmt.Println("error reading: ", err)
}
fmt.Println(b)
}
答案 0 :(得分:3)
否。 OpenFile
是用于打开文件的通用api,如果要使用unix套接字,请使用net.Listen("unixpacket", "f.sock")
或net.Dial("unixpacket", "f.sock")
os.ModeSocket
只是套接字fd的* nix注册标志,在您要过滤fd类型时使用