Maison > développement back-end > Golang > Dans Go, quand SyscallConn() est-il utile pour *os.File normal ?

Dans Go, quand SyscallConn() est-il utile pour *os.File normal ?

王林
Libérer: 2024-02-05 23:30:03
avant
853 Les gens l'ont consulté

在 Go 中,什么时候 SyscallConn() 对常规 *os.File 有用?

Contenu de la question

Je lis du code Go (de https://github.com/KarpelesLab/reflink) qui utilise des fonctions définies sur SyscallConn() (在 *os.File :

// reflinkInternal performs the actual reflink action without worrying about fallback
func reflinkInternal(d, s *os.File) error {
    ss, err := s.SyscallConn()
    if err != nil {
        return err
    }
    sd, err := d.SyscallConn()
    if err != nil {
        return err
    }
    var err2, err3 error
    err = sd.Control(func(dfd uintptr) {
        err2 = ss.Control(func(sfd uintptr) {
            // int ioctl(int dest_fd, FICLONE, int src_fd);
            err3 = unix.IoctlFileClone(int(dfd), int(sfd))
        })
    })
    if err != nil {
        // sd.Control failed
        return err
    }
    if err2 != nil {
        // ss.Control failed
        return err2
    }
    if err3 != nil && errors.Is(err3, unix.ENOTSUP) {
        return ErrReflinkFailed
    }
    // err3 is ioctl() response
    return err3
}
Copier après la connexion

Dans cet exemple, utilisez ces fonctions Control() au lieu d'utiliser directement d.Fd() et s.Fd(). Des avantages ? Plus généralement, à quoi sert func func (*os.File) SyscallConn() (syscall.RawConn, error) ? Control() 函数而不是直接使用 d.Fd()s.Fd() 是否有任何优势?更一般地说, func func (*os.File) SyscallConn() (syscall.RawConn, error) 有什么用?


正确答案


file.Fd() 返回一个文件描述符,并且它使文件描述符以阻塞模式运行(占用一个线程以进行阻塞操作)。 SyscallConn

Bonne réponse

file.Fd() renvoie un descripteur de fichier, et cela provoque l'exécution du descripteur de fichier en mode blocage (occupant un thread pour bloquer les opérations). SyscallConn ne fait pas cela. En fait, il a été créé spécifiquement pour obtenir un descripteur de fichier sans le bloquer. Veuillez consulter 🎜cette question pour plus d'informations🎜. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal