Ouvrir le lecteur CD
Résolu
NiicoDu42
Messages postés
157
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je cherchais sur google depuis un petit moment comment ouvrir/fermer le lecteur CD en langage C. J'ai vu que c'était possible avec Windows mais je n'ai rien trouvé pour Linux Ubuntu.
Merci pour vos réponses ! :D
Je cherchais sur google depuis un petit moment comment ouvrir/fermer le lecteur CD en langage C. J'ai vu que c'était possible avec Windows mais je n'ai rien trouvé pour Linux Ubuntu.
Merci pour vos réponses ! :D
A voir également:
- Ouvrir le lecteur CD
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Ouvrir fichier .dat - Guide
- Comment ouvrir un fichier docx ? - Guide
- Ouvrir avec - Guide
2 réponses
Salut, il y a la commande "eject" pour ejecter le CD. Donc si tu lances cette commande avec exec(3), le lecteur s'ouvre. Par contre, il faut dupliquer le processus courant car les commandes exec(3) terminent le processus.
Bref, en gros ça donne ça :
Bref, en gros ça donne ça :
#include <stdio.h> #include <unistd.h> int main(void) { if (fork() == 0) { // Execution de 'eject' (commande shell) dans le processus fils execlp("eject", "eject",(char*)NULL); } else { // Suite du programme } return 0; }
Nickel ! tout marche ! ...
Mais peux-tu m'expliquer la ligne :
execlp("eject", "eject",(char*)NULL);
Le "fork" j'ai compris ! :D
Mais peux-tu m'expliquer la ligne :
execlp("eject", "eject",(char*)NULL);
Le "fork" j'ai compris ! :D
Alors, la fonction exec(3) permet d'exécuter un programme. Il en existe différentes :
execlp, execv, execvp... Plus d'info ici : https://linux.die.net/man/3/exec
A noter que les fonction execL* prennent les paramètres du programme les uns après les autres. Ex : arg0, arg1, arg2...
Et que les fonction execV* prennent un tableau de char* contenant les paramètres.
execlp permet de ne pas préciser le chemin complet du programme. C.a.d qu'on a pas besoin de marqué : "/bin/eject", mais "eject" suffit.
Ensuite, on envoie à execlp le premier paramètre, qui est le nom de l'exécutable "eject".
Le deuxième paramètre est le premier paramètre de l'exécutable. Je ne me rappel plus bien pourquoi on doit remettre le nom du programme, il faudrait lire attentivement la manpage.
Bref. Et le dernier argument DOIT (c'est la manpage qui le dit) être un pointeur null. Surement parce que si ton programme prend des arguments (la syntaxe est arg0, arg1, arg2...) alors ce pointeur permet de savoir que c'est la fin de la liste des arguments. Il est dit aussi dans la manpage que c'est plus "propre" de caster ce pointeur en char*.
Et les fonctions exec mettent fin au programme, donc on se sert de ces bons vieux fork.
Désolé pour cette explication un peu bancale et imprécise, mais je ne me rappel plus trop.
execlp, execv, execvp... Plus d'info ici : https://linux.die.net/man/3/exec
A noter que les fonction execL* prennent les paramètres du programme les uns après les autres. Ex : arg0, arg1, arg2...
Et que les fonction execV* prennent un tableau de char* contenant les paramètres.
execlp permet de ne pas préciser le chemin complet du programme. C.a.d qu'on a pas besoin de marqué : "/bin/eject", mais "eject" suffit.
Ensuite, on envoie à execlp le premier paramètre, qui est le nom de l'exécutable "eject".
Le deuxième paramètre est le premier paramètre de l'exécutable. Je ne me rappel plus bien pourquoi on doit remettre le nom du programme, il faudrait lire attentivement la manpage.
Bref. Et le dernier argument DOIT (c'est la manpage qui le dit) être un pointeur null. Surement parce que si ton programme prend des arguments (la syntaxe est arg0, arg1, arg2...) alors ce pointeur permet de savoir que c'est la fin de la liste des arguments. Il est dit aussi dans la manpage que c'est plus "propre" de caster ce pointeur en char*.
Et les fonctions exec mettent fin au programme, donc on se sert de ces bons vieux fork.
Désolé pour cette explication un peu bancale et imprécise, mais je ne me rappel plus trop.
Ben après je ne peux pas t'aider, mon lecteur est "incrusté" et du coup j'obtient une erreur.
Si tu veux savoir ce qu'il se passe, débug ton programme (avec gdb par exemple) et/ou récupère la valeur renvoyée par execlp (-1 en cas d'erreur) et affiche le message à partir de errno (qui est mis à jour par exec(3))
Si tu veux savoir ce qu'il se passe, débug ton programme (avec gdb par exemple) et/ou récupère la valeur renvoyée par execlp (-1 en cas d'erreur) et affiche le message à partir de errno (qui est mis à jour par exec(3))