Partage
  • Partager sur Facebook
  • Partager sur Twitter

st_rdev major minor

    24 novembre 2017 à 6:37:09

    Hello à tou.te.s,

    Je suis à 42 entrain de recoder la fonction LS. Je ne viens pas ici pour vous demandez comment faire ou autre. Mon projet est fonctionnel, pas forcément des plus opti mais il tourne bien. 

    J'ai en revanche un problème de compréhension sur cette struct de stat - st_rdev - je ne comprend pas franchement ce qu'il en est. Ni le coup du major minor ?

    Si vous pouviez m'éclairer ce serait superbe ! J'ai lu et relu les man de stat, je suis toujours perdue...

    Rhimes

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      24 novembre 2017 à 11:16:41

      Salut,

      Quel est le problème ?

      Que ne comprends-tu pas dans cette structure ?

      • Partager sur Facebook
      • Partager sur Twitter
        24 novembre 2017 à 13:53:07

        Elle sert à identifier le device (disque, clé usb, interface réseau, carte graphique, …) que représente l'entité. Sous les systèmes Unix, le matériel et d'autres choses sont représentés comme étant des entités du système de fichiers que l'on peut utiliser pour communiquer des informations et/ou des commandes.

        La partie « majeur » identifie le type de device (donc le pilote à utiliser) et la partie « mineur » identifie le device dont il est question (partition, terminal, …).

        -
        Edité par Mad scientist 27 novembre 2017 à 12:05:15

        • Partager sur Facebook
        • Partager sur Twitter
        Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).
          27 novembre 2017 à 8:35:21

          Hello,

          Je ne comprends pas du tout ce qu'elle représente (encore moins avec l'explication de Mad Scientist je dois dire ^^).

          Je ne sais pas comment expliquer plus, je ne comprend simplement pas. Pas du tout... ><

          -
          Edité par Rhimes 27 novembre 2017 à 16:25:19

          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2017 à 13:05:35

            Rhimes a écrit:

            encore moins avec l'explication de Mac Scientist je dois dire ^^

            J'ai encore du boulot à faire avant de devenir un bon pédagogue. J'ai édité ma réponse précédente.

            (Mac scientist, la version fast-food de Mad scientist ?)

            Si tu veux une autre explication un peu plus progressive, l'identifiant majeur identifie le pilote à utiliser et l'identifiant mineur identifie la partition/le périphérique. Par exemple sur mon système:

            • 8:0 correspond à mon disque dur, /dev/sda;
            • 8:1 correspond à la première partition de mon disque, /dev/sda1;
            • 8:2 correspond à la deuxième partition de mon disque /dev/sda2;

            8 signifie qu'il faut utiliser le driver pour les disques durs et le nombre qui suit sert à identifier une partition/un disque.

            Un autre exemple d'indentifiant majeur est le 1, qui correspond à certains fichiers spéciaux gérés par le noyau, comme:

            • /dev/null, 1:3 chez moi, qui est un fichier qui envoie tout ce qu'on écrit dessus… nul part;
            • /dev/full, 1:7 chez moi, un fichier toujours « plein » qui fait échouer les opérations d'écriture;
            • /dev/zero, 1:5 chez moi, un fichier qui contient une infinité de bytes valant zéro;
            • /dev/urandom, 1:9 chez moi, dont le contenu est aléatoire;

            Le numéro 1 correspond au driver mem, l'utilisation de certaines opérations en mémoire permettant d'accélérer celles-ci.

            -
            Edité par Mad scientist 27 novembre 2017 à 13:43:47

            • Partager sur Facebook
            • Partager sur Twitter
            Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).
              27 novembre 2017 à 14:56:13

              Rhimes a écrit:

              Je suis à 42 entrain de recoder la fonction LS. Je ne viens pas ici pour vous demandez comment faire ou autre. Mon projet est fonctionnel, pas forcément des plus opti mais il tourne bien. 

              J'ai en revanche un problème de compréhension sur cette struct de stat - st_rdev - je ne comprend pas franchement ce qu'il en est. Ni le coup du major minor ?

              Bonjour

              Il existe de nombreux types de fichier sur Unix. Les simples fichiers, les répertoires, les liens symboliques, les sockets, les tubes nommés, les périphériques en mode bloc et les périphériques en mode caractère.
              Voici un exemple sur mon système:

              # ls -ld /bin/ls /dev /dev/zero /dev/fd0 /var/run/rpcbind.sock /var/run/dmeventd-server
              -rwxr-xr-x  1 root root 117656 Jun 30  2016 /bin/ls
              drwxr-xr-x 20 root root   3320 Feb  6  2017 /dev
              brw-rw----  1 root disk   2, 0 Feb  6  2017 /dev/fd0
              crw-rw-rw-  1 root root   1, 5 Feb  6  2017 /dev/zero
              prw-------  1 root root      0 Feb  6  2017 /var/run/dmeventd-server
              srw-rw-rw-  1 root root      0 Feb  6  2017 /var/run/rpcbind.sock
              # 
              

              Les numéros majeur et mineur sont affichés pour les périphériques ("2, 0" et "1, 5" dans mon exemple). Je ne pense pas qu'il soit nécessaire d'en savoir plus pour écrire une commande ls. Mais sinon, il y a  les explications de Mad scientist et le manuel de mknod.

              • Partager sur Facebook
              • Partager sur Twitter
                27 novembre 2017 à 16:29:29

                Hello,

                Mad Scientist, oui je pense que ça ferais une bonne proposition pour McDo xD déso pour la faute de frappe ;)

                Donc, avec vos explications voici ce que j'ai compris.

                st_rdev n'interviens que sur les types lbcfs (?) et dans ce cas, il faut qu'au lieu de lui demander d'afficher la taille, il doit m'afficher "l'emplacement" ?

                Désolée j'y mets de la bonne volonté, mais ma compréhension est toujours difficile tant que je ne trouve pas une personne qui saura m'expliquer de la bonne façon... Sorry

                • Partager sur Facebook
                • Partager sur Twitter
                  27 novembre 2017 à 16:49:22

                  Rhimes a écrit:

                  st_rdev n'interviens que sur les types lbcfs (?) et dans ce cas, il faut qu'au lieu de lui demander d'afficher la taille, il doit m'afficher "l'emplacement" ?

                  Comme tu le vois dans mon exemple, "ls -l" n'affiche les numéros majeur et mineur que pour c et b.

                  Et d'après http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html :
                  st_rdev : Device ID (if file is character or block special)

                  Donc ça se tient avec mon exemple.

                  Qu'est-ce que le type f?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 novembre 2017 à 10:06:36

                    Marc Mongenet a écrit:

                    Qu'est-ce que le type f?

                    FIFO ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Un vrai cours de: (C | C++ | Haskell débutant | Haskell intermédiaire | Rust).
                      28 novembre 2017 à 11:10:08

                      Mad scientist a écrit:

                      Marc Mongenet a écrit:

                      Qu'est-ce que le type f?

                      FIFO ?

                      Je ne sais pas. Le pipe fait déjà FIFO. Je ne vois rien dans https://en.wikipedia.org/wiki/Unix_file_types.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 novembre 2017 à 14:05:25

                        Le f n'existe pas tout simplement. ;) Faute de frappe ?

                        Par rapport aux major/minor, il faut regarder le devices.txt : https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/devices.txt

                        Speciale pour Rhimes (desole pour les autres) : https://forum.intra.42.fr/topics/15774/messages?page=1#54954

                        • Partager sur Facebook
                        • Partager sur Twitter

                        st_rdev major minor

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown