Ouvrir le lecteur CD
Résolu/Fermé
NiicoDu42
Messages postés
157
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
20 mars 2017
-
21 mars 2013 à 20:15
Utilisateur anonyme - 25 mars 2013 à 19:56
Utilisateur anonyme - 25 mars 2013 à 19:56
A voir également:
- Ouvrir le lecteur CD
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Comment ouvrir un fichier docx ? - Guide
- Ouvrir avec - Guide
- Ouvrir winmail.dat - Guide
2 réponses
Utilisateur anonyme
23 mars 2013 à 09:39
23 mars 2013 à 09:39
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; }
NiicoDu42
Messages postés
157
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
20 mars 2017
10
23 mars 2013 à 14:52
23 mars 2013 à 14:52
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.
NiicoDu42
Messages postés
157
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
20 mars 2017
10
23 mars 2013 à 20:26
23 mars 2013 à 20:26
Parfait ! Je n'aime vraiment pas ne pas comprendre donc je te remercie de cette explication plutôt claire ! :D
Mais ... "Le deuxième paramètre est le premier paramètre de l'exécutable." Dans l'exécutable "eject" on peut rentrer plusieurs paramètres ? comme pour fermer le lecteur par exemple ?
Mais ... "Le deuxième paramètre est le premier paramètre de l'exécutable." Dans l'exécutable "eject" on peut rentrer plusieurs paramètres ? comme pour fermer le lecteur par exemple ?
NiicoDu42
Messages postés
157
Date d'inscription
mardi 8 janvier 2013
Statut
Membre
Dernière intervention
20 mars 2017
10
Modifié par NiicoDu42 le 25/03/2013 à 19:48
Modifié par NiicoDu42 le 25/03/2013 à 19:48
Haa voilà mon erreur ! je mettais : execlp("eject","eject -t",(char*)NULL);
Mais ... ;)
Le lecteur supporte en console : eject -t
Alors que dans le programme lorsque je met cette ligne : execlp("eject","eject","-t",(char*)NULL); tout se compile mais erreur lors de l'exécution ... :'(
Mais ... ;)
Le lecteur supporte en console : eject -t
Alors que dans le programme lorsque je met cette ligne : execlp("eject","eject","-t",(char*)NULL); tout se compile mais erreur lors de l'exécution ... :'(
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))