Maison > développement back-end > Golang > le corps du texte

Comment déterminer si un fichier Go est exécutable ?

Linda Hamilton
Libérer: 2024-11-04 00:18:02
original
990 Les gens l'ont consulté

How to Determine if a Go File is Executable?

Comment déterminer l'état d'un fichier exécutable dans Go

Étant donné une instance os.FileInfo, vous devrez peut-être vérifier si un fichier est exécutable dans Aller. Cela nécessite de déchiffrer les bits d'autorisation de os.FileInfo.Mode().

Cas de test :

#!/usr/bin/env bash
mkdir -p test/foo/bar
touch test/foo/bar/{baz.txt,quux.sh}
chmod +x test/foo/bar/quux.sh
Copier après la connexion
<code class="go">import (
    "os"
    "path/filepath"
    "fmt"
)</code>
Copier après la connexion

Solution :

L'exécutabilité du fichier est déterminée par les bits d'autorisation Unix stockés dans os.FileMode.Perm(). Ces bits forment un masque de bits de 9 bits (octal 0777).

Signification du bit d'autorisation Unix :

rwxrwxrwx
Copier après la connexion

Pour chaque classe d'utilisateurs :

  • Propriétaire : Bitmask 0100
  • Groupe : Bitmask 0010
  • Autres : Bitmask 0001

Fonctions pour vérifier l'exécutabilité :

  • Exécutable par propriétaire :

    <code class="go">func IsExecOwner(mode os.FileMode) bool {
      return mode&0100 != 0
    }</code>
    Copier après la connexion
  • Exécutable par groupe :

    <code class="go">func IsExecGroup(mode os.FileMode) bool {
      return mode&0010 != 0
    }</code>
    Copier après la connexion
  • Exécutable par d'autres :

    <code class="go">func IsExecOther(mode os.FileMode) bool {
      return mode&0001 != 0
    }</code>
    Copier après la connexion
  • Exécutable par n'importe lequel :

    <code class="go">func IsExecAny(mode os.FileMode) bool {
      return mode&0111 != 0
    }</code>
    Copier après la connexion
  • Exécutable par tous :

    <code class="go">func IsExecAll(mode os.FileMode) bool {
      return mode&0111 == 0111
    }</code>
    Copier après la connexion
<code class="go">func main() {
    filepath.Walk("test", func(path string, info os.FileInfo, err error) error {
        if err != nil || info.IsDir() {
            return err
        }
        fmt.Printf("%v %v", path, IsExecAny(info.Mode().Perm()))
    }
}</code>
Copier après la connexion

Sortie attendue :

test/foo/bar/baz.txt false
test/foo/bar/quux.txt true
Copier après la connexion

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal