Welcome, Guest. Please Login or Register
FUG-FR logo
 
  HomeHelpSearchLoginRegister  
 
Pages: 1 2 3 
Exécution automatique d'un programme (Read 18463 times)
ros
Global Moderator
*****
Offline



Posts: 868
Paris
Gender: male
Re: Exécution automatique d'un programme
Reply #15 - 27. Nov 2008 at 19:12
 
Code:
execl("/usr/local/sbin/dmidecode", ">", "/usr/home/admin/info_sys.txt", NULL); 


Ah non tu ne peux pas faire ça comme ça !
Explication : > est une redirection du shell, dmidecode ne sais pas gérer l'option ">" pas plus que "/usr/home/admin/info_sys.txt"

Alors comment faire ? Les pipes !
dmidecode ecrit sur la sortie standard, qui est un descripteur de fichier (1 )
il te faut donc faire une redirection de ta sortie standard vers un pipe ou un fichier (ça marche mais c'est moins beau.

Voici un exemple illustré de ls, c'est tout simple, on ne verifie même pas que ça marche et on ne contrôle pas les erreurs, mais c'est une bonne base.

Code:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>

int
main(void)
{
   /* On ouvre un fichier */
   int pfd = open("CON",O_WRONLY|O_CREAT|O_TRUNC,S_IRWXU);
   /* On substitue STDOUT au descripteur de fichier */
   dup2(pfd, STDOUT_FILENO);
   /* On ferme FD dont on n'a plus besoin */
   close(pfd);
   /* On execute la commande */
   execl("/bin/ls","ls",NULL);
   /* On n'arrive là qu'en cas d'erreur */
   return EXIT_SUCCESS;
}

 

Back to top
 

" Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes "
WWW WWW elfato_99  
IP Logged
 
Ecureuil
Full Member
***
Offline


I Love BSD!

Posts: 131
Re: Exécution automatique d'un programme
Reply #16 - 27. Nov 2008 at 19:48
 
Merci beaucoup Ros, surtout pour l'explication.
Effectivement, je pouvais toujours essayer, ça risquait pas de fonctionner.
J'ai appris un truc de plus et dormirai "moins bête" ce soir ! Grin
Je vais regarder ton exemple avec ls de près et quand serai arrivé à le faire fonctionner avec dmidecode, je ferai ça avec pipe, j'aime bien quand c'est beau moua... Smiley

Encore merci. Wink
Back to top
 
 
IP Logged
 
ros
Global Moderator
*****
Offline



Posts: 868
Paris
Gender: male
Re: Exécution automatique d'un programme
Reply #17 - 27. Nov 2008 at 21:40
 
non, non, c'est pas obligé, les pipes ne sont pas utiles, tu peux faire comme ça
il faut juste rajouter les contrôles des retour erreur.
Back to top
 

" Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes "
WWW WWW elfato_99  
IP Logged
 
Ecureuil
Full Member
***
Offline


I Love BSD!

Posts: 131
Re: Exécution automatique d'un programme
Reply #18 - 28. Nov 2008 at 11:12
 
Merci ros, je suis à bosser sur ce bout de code et au passage gloire à ceux qui ont crée les man pages !

Par contre, quelqu'un pourrait-il m'expliquer la subtilité qu'il y a à placer un script et/ou une commande à exécuter au démarrage du système soit dans /etc/rc.local ou dans /etc/rc.d comme s'est expliqué ici: http://www.freebsd.org/doc/fr_FR.ISO8859-1/books/handbook/
Merci. Wink
Back to top
 
 
IP Logged
 
ros
Global Moderator
*****
Offline



Posts: 868
Paris
Gender: male
Re: Exécution automatique d'un programme
Reply #19 - 28. Nov 2008 at 13:34
 
man est omniscient et te donne la réponse :
Quote:
The rc.local script contains commands which are pertinent only to a specific site.  Typically, the /usr/local/etc/rc.d/ mechanism is used instead of rc.local these days but if you want to use rc.local, it is still supported.  In this case, it should source /etc/rc.conf and contain additional custom startup code for your system.  The best way to handle rc.local, however, is to separate it out into rc.d/ style scripts and place them under /usr/local/etc/rc.d/.
The rc.conf file contains the global system configuration information referenced by the startup scripts, while rc.conf.local contains the local system configuration.


sources : rc(8)
aka man 8 rc
aka man rc.local
Back to top
 

" Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes "
WWW WWW elfato_99  
IP Logged
 
Ecureuil
Full Member
***
Offline


I Love BSD!

Posts: 131
Re: Exécution automatique d'un programme
Reply #20 - 28. Nov 2008 at 15:07
 
ros wrote on 28. Nov 2008 at 13:34:
man est omniscient et te donne la réponse :
Quote:
The rc.local script contains commands which are pertinent only to a specific site.  Typically, the /usr/local/etc/rc.d/ mechanism is used instead of rc.local these days but if you want to use rc.local, it is still supported.  In this case, it should source /etc/rc.conf and contain additional custom startup code for your system.  The best way to handle rc.local, however, is to separate it out into rc.d/ style scripts and place them under /usr/local/etc/rc.d/.
The rc.conf file contains the global system configuration information referenced by the startup scripts, while rc.conf.local contains the local system configuration.


sources : rc(8)
aka man 8 rc
aka man rc.local

Merci ros, il faut vraiment que j'adopte ce réflexe sur man... Roll Eyes

Par contre, aka, cela signifie...? Huh
J'ai pas trouvé dans man ! Grin
Back to top
 
 
IP Logged
 
fgudin
Global Moderator
*****
Offline


PouetPouetBSD roul3z

Posts: 1552
Thonon (74)
Gender: male
Re: Exécution automatique d'un programme
Reply #21 - 28. Nov 2008 at 15:12
 
Ecureuil wrote on 28. Nov 2008 at 15:07:
Merci ros, il faut vraiment que j'adopte ce réflexe sur man... Roll Eyes

Par contre, aka, cela signifie...? Huh
J'ai pas trouvé dans man ! Grin

'man -k mot' (aka 'apropos') est bien aussi Smiley
Sinon «aka» -> «Also Known As»
Back to top
 
 
IP Logged
 
Ecureuil
Full Member
***
Offline


I Love BSD!

Posts: 131
Re: Exécution automatique d'un programme
Reply #22 - 28. Nov 2008 at 15:57
 
fgudin wrote on 28. Nov 2008 at 15:12:
Ecureuil wrote on 28. Nov 2008 at 15:07:
Merci ros, il faut vraiment que j'adopte ce réflexe sur man... Roll Eyes

Par contre, aka, cela signifie...? Huh
J'ai pas trouvé dans man ! Grin

'man -k mot' (aka 'apropos') est bien aussi Smiley
Sinon «aka» -> «Also Known As»


ppfioouuuuuuuu...
Merci francis. Wink
C'est fou ce que l'on peut apprendre comme trucs ici ! Grin
Entre le Forum FUG-FR, mes trois bouquins et les cachets qui vont bien pour rester éveillé les nuits, dans quelques semaines je suis un pro de FreeBSD et de la programmation système ! Cheesy
Back to top
 
 
IP Logged
 
Dumpy
Senior Member
****
Offline



Posts: 313
GEMENOS
Gender: male
Re: Exécution automatique d'un programme
Reply #23 - 28. Nov 2008 at 17:22
 
Pardon de m'akamiscer dans ce fil, il y a aussi une page man dmidecode (Ou il est aussi précisé que les infos fournies ne sont pas toujours à prendre au pied de la lettre), et un site, ou l'on pourra trouver des explications et liens vers des scripts, etc...
Pour aider...


   
Back to top
 

Dumpy
 
IP Logged
 
patrick
Senior Member
****
Offline


Les pixels au peuple

Posts: 398
Re: Exécution automatique d'un programme
Reply #24 - 29. Nov 2008 at 00:06
 
Ecureuil wrote on 27. Nov 2008 at 17:06:
En voici le code:
Code:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int
main(void)
{
	execl("/usr/local/sbin/dmidecode", ">", "/usr/home/admin/info_sys.txt", NULL);
	return EXIT_SUCCESS;
} 



Pas d'erreur à la compilation, j'exécute mon programme dans mon interpréteur et au lieu de générer mon fichier texte info_sys.txt, cela me lance directement dmidecode dans l'interpréteur... Roll Eyes


Oui, normal. Que fait ton code : il execute dmidecode avec les *arguments* ">" et ""/usr/home/admin/info_sys.txt""

C'est pas du tout la même chose que dmidecode > info_sys.txt. Où là dmidecode est appelé avec aucun argument, mais avec sa sortie standard (stdout) redirigée vers un fichier.

Je t'invite à lire un bouquin sur la programmation et les concepts Unix au plus vite...

Bon courage, mais tu verras que ça n'a rien de bien compliqué.
Back to top
 
 
IP Logged
 
patrick
Senior Member
****
Offline


Les pixels au peuple

Posts: 398
Re: Exécution automatique d'un programme
Reply #25 - 29. Nov 2008 at 00:17
 
Ecureuil wrote on 27. Nov 2008 at 09:27:
En quoi cela consiste-t-il, comme cela se manifeste-t-il ?
J'ai bien regardé ici http://jargonf.org/wiki/fork mais n'ai pas tout saisi...


Sous unix tu n'as jamais de création de processus, il n'y a que des duplications. Pour exécuter un nouveau programme il faut que tu dupliques le processus courant -fork()- et que tu le recouvres (exec).

C'est vraiment la base ! Tu vas galérer inutilement si tu ne prends pas le temps de te documenter un minimum.
Back to top
 
 
IP Logged
 
Ecureuil
Full Member
***
Offline


I Love BSD!

Posts: 131
Re: Exécution automatique d'un programme
Reply #26 - 01. Dec 2008 at 11:50
 
Dumpy wrote on 28. Nov 2008 at 17:22:
Pardon de m'akamiscer dans ce fil, il y a aussi une page man dmidecode (Ou il est aussi précisé que les infos fournies ne sont pas toujours à prendre au pied de la lettre), et un site, ou l'on pourra trouver des explications et liens vers des scripts, etc...
Pour aider...

Merci Dumpy, je vais regarder cela de près. Wink
Back to top
 
 
IP Logged
 
Ecureuil
Full Member
***
Offline


I Love BSD!

Posts: 131
Re: Exécution automatique d'un programme
Reply #27 - 01. Dec 2008 at 11:55
 
patrick wrote on 29. Nov 2008 at 00:06:
Ecureuil wrote on 27. Nov 2008 at 17:06:
En voici le code:
Code:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int
main(void)
{
	execl("/usr/local/sbin/dmidecode", ">", "/usr/home/admin/info_sys.txt", NULL);
	return EXIT_SUCCESS;
} 



Pas d'erreur à la compilation, j'exécute mon programme dans mon interpréteur et au lieu de générer mon fichier texte info_sys.txt, cela me lance directement dmidecode dans l'interpréteur... Roll Eyes


Oui, normal. Que fait ton code : il execute dmidecode avec les *arguments* ">" et ""/usr/home/admin/info_sys.txt""

C'est pas du tout la même chose que dmidecode > info_sys.txt. Où là dmidecode est appelé avec aucun argument, mais avec sa sortie standard (stdout) redirigée vers un fichier.

Je t'invite à lire un bouquin sur la programmation et les concepts Unix au plus vite...

Bon courage, mais tu verras que ça n'a rien de bien compliqué.

patrick wrote on 29. Nov 2008 at 00:17:
Ecureuil wrote on 27. Nov 2008 at 09:27:
En quoi cela consiste-t-il, comme cela se manifeste-t-il ?
J'ai bien regardé ici http://jargonf.org/wiki/fork mais n'ai pas tout saisi...


Sous unix tu n'as jamais de création de processus, il n'y a que des duplications. Pour exécuter un nouveau programme il faut que tu dupliques le processus courant -fork()- et que tu le recouvres (exec).

C'est vraiment la base ! Tu vas galérer inutilement si tu ne prends pas le temps de te documenter un minimum.

Merci pour tes encouragements patrick, je "galère" déjà en fait !  Grin
Je sais que je vais en chier pendant quelques temps mais j'ai de l'énergie et de la volonté à revendre...
Le travail finissant toujours par payer et en plus avec vos conseils avisés, je devrai pouvoir, à terme, m'en sortir comme un grand ! Smiley
Back to top
 
 
IP Logged
 
Ecureuil
Full Member
***
Offline


I Love BSD!

Posts: 131
Re: Exécution automatique d'un programme
Reply #28 - 29. Dec 2008 at 17:15
 
Bonjour à tous,

J'ai donc un script (lui-même faisant appel à un binaire) "chmodé +x" qui se trouve dans /etc/rc.d

J'ai ajouté dans mon rc.conf :
Code:
mon_script_enable="YES" 


Je reboote, tout fonctionne à merveille.

Sauf que, lorsque je modifie mon rc.conf et que je mets cette dernière ligne en commentaire ou que je la supprime ben au reboot mon script s'exécute quand même...?!?  Shocked
Back to top
 
 
IP Logged
 
ros
Global Moderator
*****
Offline



Posts: 868
Paris
Gender: male
Re: Exécution automatique d'un programme
Reply #29 - 29. Dec 2008 at 18:02
 
Il ressemble à quoi ton script ?
Back to top
 

" Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes "
WWW WWW elfato_99  
IP Logged
 
Pages: 1 2 3