• # Re: Savoir si un CD est présent dans le lecteur

    Posté par  . Évalué à 2.

    mount /dev/cdrom.
    Si ca marche, il y a un CD, sinon, il n'y en a pas.

    Sur ce je vais prendre l'air -->[]
  • # Re: Savoir si un CD est présent dans le lecteur

    Posté par  (site web personnel) . Évalué à 3.

    http://mat.virgule.info/temp/cdrom.c(...) < programme a la con fait en 5 min, ca peut ne pas marcher, mais ca marche chez moi :)
    Si tu veux verifier le type de truc dans le lecteur, ca prend juste quelques lignes en plus...
    • [^] # Re: Savoir si un CD est présent dans le lecteur

      Posté par  . Évalué à -1.

      if (argc == 2)
      dev = argv[1];
      else
      dev = "/dev/cdrom";

      C'est moi, ou ça c'est pas du C O_O ?

      Enfin le premier dev je dis pas, mais dev = "/dev/cdrom" sachant que dev est un pointeur ?? Je suis pas une bête du C, mais ça me parrait louche :/
      • [^] # Re: Savoir si un CD est présent dans le lecteur

        Posté par  (Mastodon) . Évalué à 1.

        Euh si ça marche. "blabla" c'est aussi un bout de texte, comme argv[1].
        • [^] # Re: Savoir si un CD est présent dans le lecteur

          Posté par  . Évalué à 1.

          Sauf que argv[1] est une variable et qu'on pointera dessus non ?

          Là on balance un texte comme ça dans un pointeur... Je comprends pas, personne pour m'expliquer plutôt que me moinsser bêtement ?
          • [^] # Re: Savoir si un CD est présent dans le lecteur

            Posté par  . Évalué à 1.

            argv[1] est un pointeur vers chaine de caractère.
            "bidule" est aussi un pointeur vers chaine de caractère.

            machin = "bidule"; veut dire que machin prendra l'adresse de la chaine bidule, c'est pas comme a = 8. Mais tu peux faire printf("%s",machin).

            Tu suis ? Je pense ne pas avoir dit de grosse connerie.
            • [^] # Re: Savoir si un CD est présent dans le lecteur

              Posté par  . Évalué à 1.

              C'est juste que je vois pas où, justement, est cette chaîne "bidule".

              Me semblait qu'on pouvait pas faire une châine comme ça en C ? J'étais habitué à des str[machin] de tous les côtés pour manipuler des chaînes, c'est pour ça que j'étais étonné.
              • [^] # Re: Savoir si un CD est présent dans le lecteur

                Posté par  . Évalué à 1.

                Bin la chaine "/dev/cdrom" est incluse dans le segment de donnees lors de la compilation (le .db de l'asm).

                L'expression "/dev/cdrom" est du type const char * et contient l'addresse de cette chaine dans le segment data du programme. Tu peux meme écrire dedans si tu veux, du moment que tu ne depasse pas la capacité.
            • [^] # Re: Savoir si un CD est présent dans le lecteur

              Posté par  . Évalué à 1.

              chezmoicommecacamarchepas.org :/

              lr@merlin~/tmp$ cat test.c
              #include <stdio.h>
              #include <stdlib.h>
              #include <string.h>

              int main(void) {
              char *truc;
              truc = "Test";
              printf("%s", &truc);
              return 0;
              }
              lr@merlin~/tmp$ gcc -o test test.c
              lr@merlin~/tmp$ ./test
              È÷¿¿%
              lr@merlin~/tmp$


              Dans le doute par rapport à printf("%s", &truc); j'ai refais sans :

              lr@merlin~/tmp$ cat test.c
              #include <stdio.h>
              #include <stdlib.h>
              #include <string.h>

              int main(void) {
              char *truc;
              truc = "Test";
              printf("%s", truc);
              return 0;
              }
              lr@merlin~/tmp$ gcc -o test test.c
              lr@merlin~/tmp$ ./test
              lr@merlin~/tmp$

              Niet nada pas de "Test" à l'horizon. J'ai omi quelque chose dans ce bout de code à la con ? Je demande qu'à apprendre, car là je vois pas comment on peut mettre une string directement dans un pointeur comme ça.
              • [^] # Re: Savoir si un CD est présent dans le lecteur

                Posté par  (Mastodon) . Évalué à 1.

                void main()
                {
                char *test;
                test ="toto";
                printf("%s\n", test);
                }


                $ cc test.c
                $ ./a.out
                toto
              • [^] # Re: Savoir si un CD est présent dans le lecteur

                Posté par  . Évalué à 1.

                Le premier n'est pas bon, c'est truc tout court, puisqu'il contient déjà une adresse. Et printf va "suivre" l'adresse, pour aller afficher la chaine.
                Ensuite, dans le 2ème, si tu remplaces :

                printf("%s", truc);

                par

                printf("%s\n",truc);

                Ca marche. Tout simplement parce qu'il faut vider le tampon de sortie, chose qui se fait avec \n. Si tu vides pas le tampon, rien ne garantit qu'il sera écrit. Et ici tu vois bien qu'il n'est pas écrit.

                Voilà :)
              • [^] # Re: Savoir si un CD est présent dans le lecteur

                Posté par  . Évalué à 2.

                Tu peux mettre un string dans un pointeur comme ca car le compilo le voit et alloue tout seul la memoire pour contenir le bloc(sur la stack) et met le pointeur la ou il faut.

                Bref,

                char *toto;
                toto="hello";

                C'est a peu pres identique a :

                char toto[6]="hello";

                Mais c'est moche et faut pas le faire.
  • # Re: Savoir si un CD est présent dans le lecteur

    Posté par  (site web personnel) . Évalué à 3.

    • Un truc qui est pas mal aussi c'est d'aller faire un ptit tour dans le répertoire /proc : le fichier info qui donne la capacité du medium /proc/ide/hdX/capacity, faut ensuite diviser le résultat par 2048 et hop ça te donne la capacité en mo, après tu fais des testes sur la taille..
    • Un autre truc, si tu as cdrtools d'installer, c'est de récupérer l'info sur la taille en faisant isoinfo -i /dev/hdX -d | grep "Volume size", ensuite il faut multiplier par 2 et diviser par 1024 et là tu retrouves le même résultat en mo :) ...
    mes 2 centimes d'€.
  • # Re: Savoir si un CD est présent dans le lecteur

    Posté par  . Évalué à 2.

    Comme dit plus haut, avec mount /cdrom. Ensuite tu consulte $?, si c'est égale à 0, y'a un CD dans le lecteur, sinon non.

    En bash, ça donne:

    #!/bin/bash
    umount /cdrom 2> /dev/null # On démonte le CD au cas ou y'en aurai un de monté
    mount /cdrom 2> /dev/null # On "tente" de monter le CD

    if [ "$?" == "0" ]; then
    echo "y'a 1 CD dans le lecteur"
    else
    echo "Lecteur de CDROM vide"
    fi
    • [^] # Re: Savoir si un CD est présent dans le lecteur

      Posté par  (site web personnel) . Évalué à 1.

      Oui mais non:
      - ca t'oblige a mounter/demounter dans tous les sens
      - tu n'es pas obligé d'avoir le droit de le faire
      - ca ne marchera pas avec un truc audio
      - ca ne marchera pas avec un cd-r ou autre truc dans ce genre la vierge
      - ca ne marchera pas si le fs dessus est endommagé :) (bon, ok, c'est vicieux :)
      • [^] # Re: Savoir si un CD est présent dans le lecteur

        Posté par  . Évalué à 1.

        Bon c'est vrai, c'est pas terrible.
        alors plutot ça:


        #!/bin/bash

        if [ -z "$(cddb-id 2>/dev/stdout | grep "error")" ]; then
               echo "y'a 1 CD dans le lecteur"
        else
               echo "Lecteur de CDROM vide"
        fi


        - pas obligé de mounter/demounter dans tous les sens
        - pas obliger d'être root (enfin en tous cas chez moi)
        - fonctionne aussi bien avec cd de donnée que cd audio

        par contre je n'est plus de CD vierge sous la main pour tester :(
        et je n'ai pas de CD endommagé :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.