登录
首页 >  Golang >  Go问答

使用 os.OpenFile() 代替 net.Listen()

来源:stackoverflow

时间:2024-03-30 10:48:18 110浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《使用 os.OpenFile() 代替 net.Listen()》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我深入研究了 os.openfilenet.listen 的调用堆栈,看看是否可以使用 os.openfile 创建 unix 域套接字。以下是我的尝试。但是,在跟踪两个调用堆栈(os.openfilenet.listen )之后,我仍然感到困惑。显然,下面的代码不会从文件中读取数据,而是将数据存储到文件系统中。

  1. 如何使用 os.openfile 实现 unix 域套接字?
  2. 如果 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)
}

解决方案


  1. 没有。 OpenFile 是用于打开文件的通用 api,如果您想使用 unix 套接字,请使用 net.Listen("unixpacket", "f.sock")net.Dial("unixpacket", "f.sock") p>

  2. os.ModeSocket 只是 *nix 为套接字 fd 注册的标志,当您想要过滤 fd 类型时使用

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>