Maison > développement back-end > Golang > Utilisation de l'appel système Golang

Utilisation de l'appel système Golang

WBOY
Libérer: 2023-05-15 09:37:37
original
1484 Les gens l'ont consulté

Golang est un langage de programmation avec une efficacité de développement élevée et de fortes performances de concurrence. Afin de mieux interagir avec le système d'exploitation, Golang introduit la bibliothèque syscall. La bibliothèque syscall fournit un ensemble de fonctions qui encapsulent les appels système sous-jacents, permettant aux développeurs d'exploiter plus facilement les ressources système sous-jacentes. Cet article approfondira l'utilisation de la bibliothèque d'appels système Golang.

  1. Introduction de la bibliothèque syscall

Dans Golang, les appels système utilisent généralement des fichiers d'en-tête en langage C, tels que , pas de fichier d'en-tête correspondant dans Golang. Pour résoudre ce problème, Golang a introduit la bibliothèque syscall.

Lorsque vous utilisez la bibliothèque syscall dans Golang, vous devez importer le package "syscall" dans le code :

import (
    "syscall"
)
Copier après la connexion
  1. Utilisation de base de syscall

Les fonctions de la bibliothèque syscall correspondent directement aux fonctions d'appel système, telles que la fonction open correspondant à syscall La fonction Open dans , la fonction read correspond à la fonction Read dans syscall, etc. La règle de dénomination de ces fonctions consiste à mettre en majuscule la première lettre du nom de fonction d'origine et à supprimer le trait de soulignement. Nous pouvons voir toutes les fonctions de syscall dans la documentation officielle de Golang.

Prenons l'ouverture d'un fichier comme exemple pour présenter l'utilisation de base de syscall.

package main

import (
    "fmt"
    "syscall"
)

func main() {
    path := "test.txt"
    flag := syscall.O_RDWR | syscall.O_CREAT
    perm := syscall.S_IRUSR | syscall.S_IWUSR

    fd, err := syscall.Open(path, flag, perm)
    if err != nil {
        fmt.Printf("open file %s failed, err: %v", path, err)
        return
    }
    fmt.Printf("open file %s success, fd: %d", path, fd)
    syscall.Close(fd)
}
Copier après la connexion
Copier après la connexion

Dans le code, nous définissons d'abord le chemin du fichier, le mode d'ouverture du fichier et les autorisations du fichier. Ensuite, nous ouvrons le fichier à l'aide de la fonction syscall.Open, dont la valeur de retour est le descripteur de fichier. Si l'ouverture du fichier échoue, un message d'erreur est renvoyé. Enfin, nous fermons le fichier à l'aide de la fonction syscall.Close.

  1. Comparaison entre syscall et le package os

Dans Golang, une autre bibliothèque d'appels système largement utilisée est le package os. Les fonctions d'appel système fournies par le package os présentent de nombreuses similitudes avec les fonctions de la bibliothèque syscall, ce qui rend de nombreux développeurs confus quant à leur utilisation. Ici, comparons comment les packages syscall et os sont utilisés pour ouvrir des fichiers :

  • Utilisez la bibliothèque syscall :
package main

import (
    "fmt"
    "syscall"
)

func main() {
    path := "test.txt"
    flag := syscall.O_RDWR | syscall.O_CREAT
    perm := syscall.S_IRUSR | syscall.S_IWUSR

    fd, err := syscall.Open(path, flag, perm)
    if err != nil {
        fmt.Printf("open file %s failed, err: %v", path, err)
        return
    }
    fmt.Printf("open file %s success, fd: %d", path, fd)
    syscall.Close(fd)
}
Copier après la connexion
Copier après la connexion
  • Utilisez le package os :
package main

import (
    "fmt"
    "os"
)

func main() {
    path := "test.txt"

    file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0644)
    if err != nil {
        fmt.Printf("open file %s failed, err: %v", path, err)
        return
    }
    defer file.Close()
    fmt.Printf("open file %s success", path)
}
Copier après la connexion

En comparant les codes des deux, nous pouvons constater que os Les fonctions OpenFile dans le package, fournissez les opérations d'E/S sur les fichiers de manière supérieure, et leurs paramètres et valeurs de retour sont plus faciles à comprendre. Cependant, dans certains cas, l'utilisation du package os peut entraîner une surcharge inutile, car les fonctions du package os effectuent souvent des opérations supplémentaires, telles que le formatage des chemins, la vérification des autorisations de fichiers, etc. Dans ces cas, vous pouvez utiliser la bibliothèque syscall pour appeler directement des fonctions au niveau du système, qui peuvent utiliser les ressources du système d'exploitation plus efficacement. Par conséquent, le choix d'utiliser la bibliothèque syscall ou le package os doit être basé sur le scénario d'application.

  1. Utilisez la bibliothèque syscall pour lire et écrire des fichiers

La bibliothèque syscall fournit deux fonctions, Lire et Écrire, pour lire et écrire des fichiers. Regardons un exemple ci-dessous, utilisant la bibliothèque syscall pour lire les données d'un fichier et les imprimer sur la console :

package main

import (
    "fmt"
    "syscall"
)

func main() {
    path := "test.txt"
    flag := syscall.O_RDONLY

    fd, err := syscall.Open(path, flag, 0)
    if err != nil {
        fmt.Printf("open file %s failed, err: %v", path, err)
        return
    }
    defer syscall.Close(fd)

    buf := make([]byte, 1024)
    for {
        n, err := syscall.Read(fd, buf)
        if err != nil || n == 0 {
            break
        }
        fmt.Print(string(buf[:n]))
    }
}
Copier après la connexion

Dans le code, nous ouvrons d'abord le fichier en mode lecture seule, puis utilisons la fonction syscall.Read pour lire les données du fichier Lire les données et imprimer les données sur la console. Il est à noter que nous utilisons la fonction make pour déclarer une tranche et l'utilisons comme cache de lecture pour stocker les données lues par la fonction syscall.Read.

  1. Résumé

Grâce à cet article, nous avons appris l'utilisation de base de la bibliothèque syscall et comparé les similitudes et les différences entre la bibliothèque syscall et le package os. Dans le développement réel, nous devons choisir de manière flexible la bibliothèque syscall ou le package os en fonction de différents scénarios pour répondre aux besoins du programme. Dans le même temps, nous devons également prêter attention aux restrictions d'accès des fonctions d'appel système sur les ressources sous-jacentes afin d'éviter des problèmes inutiles d'accès aux autorisations. En utilisant rationnellement la bibliothèque syscall, nous pouvons mieux exploiter les ressources système sous-jacentes et améliorer les performances et la robustesse du programme.

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:php.cn
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