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


I Love BSD!

Posts: 131
Exécution automatique d'un programme
26. Nov 2008 at 11:16
 
Bonjour à tous,

Pour les besoins d'un projet, il me faut écrire un programme de contrôle qui doit se lancer automatiquement après le chargement de l'O.S., NanoBSD en l'occurence .

Mes questions:

1 - Est-ce cela que l'on appele un script ?
2 - Est-il possible d'automatiser l'exécution de ce programme avant le login ou pas ?
3 - Ce programme doit exécuter une commande (dmidecode) qui va écrire dans un fichier texte.
Quelle est l'expression dans un fichier source C qui permet d'exécuter une commande (dmidecode dans ce cas) ?
Merci ! Wink
Back to top
 
 
IP Logged
 
ros
Global Moderator
*****
Offline



Posts: 868
Paris
Gender: male
Re: Exécution automatique d'un programme
Reply #1 - 26. Nov 2008 at 19:05
 
Quote:
1 - Est-ce cela que l'on appele un script ?

Non, un script est un langage interprété, et qui ne nécessite pas de compilation
-perl,ruby,python,sh,bash sont des langages de script
- c,C++,java n'en sont pas

Quote:
2 - Est-il possible d'automatiser l'exécution de ce programme avant le login ou pas ?

Oui, tu appelles ton programme dans /etc/rc.local, comme le monsieur te l'explique  

Quote:
3 - Ce programme doit exécuter une commande (dmidecode) qui va écrire dans un fichier texte.

Il n'y a la aucun problème, fais tout de même attention à donner le chemin absolut du fichier, ainsi que le chemin complet de l'exécutable.

Voila, c'était tout ?  Wink

Quote:
Quelle est l'expression dans un fichier source C qui permet d'exécuter une commande (dmidecode dans ce cas) ?

exec(3), mais attention elle est recouvrante.
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
 
ros
Global Moderator
*****
Offline



Posts: 868
Paris
Gender: male
Re: Exécution automatique d'un programme
Reply #2 - 26. Nov 2008 at 19:15
 
Je prends de l'avance sur ta prochaine question : http://www.ai.univ-paris8.fr/~jk/C/Sys/td_6/node1.html
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 #3 - 26. Nov 2008 at 20:55
 
Merci ros pour tous ces éclaircissements Wink
Je vais regarder tout ça de près avant de poser de nouveau une question... Grin
Et même trouver la question que j'étais censé poser au moment de poster ce post-ci ! Cheesy
Back to top
 
 
IP Logged
 
Ecureuil
Full Member
***
Offline


I Love BSD!

Posts: 131
Re: Exécution automatique d'un programme
Reply #4 - 27. Nov 2008 at 08:25
 
Salut à tous,

Bon ros, j'ai réfléchi toute la nuit à la question que je pourrais te poser ! Smiley

En fait, j'en ai deux ! Grin


1 - Qu'est-ce qu'une expression recouvrante ? Y a-t-il un risque à l'employer ? (Ok, là ça fait deux questions en une, je triche un peu...)

2 - Au niveau sécurité, le fait de faire exécuter de façon automatique un programme en le placant dans  /etc/rc.local, est-ce facilement contournable ? Je veux dire, par exemple, une personne mal attentionnée (non non je ne suis pas parano...) pourrait-elle démarrer en mode single-user ou afficher le prompt du chargeur (ou toute autre processus visant à contourner l'exécution du programme) et aller modifier le  /etc/rc.local ?
Merci ! Wink
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 #5 - 27. Nov 2008 at 08:55
 
Ecureuil wrote on 27. Nov 2008 at 08:25:
1 - Qu'est-ce qu'une expression recouvrante ? Y a-t-il un risque à l'employer ? (Ok, là ça fait deux questions en une, je triche un peu...)

La formule est étrange, mais bon… ros veut simplement attirer ton attention sur le fait qu'exec(2) remplace le processus courant (il faut donc forker avant).
Ecureuil wrote on 27. Nov 2008 at 08:25:
2 - Au niveau sécurité, le fait de faire exécuter de façon automatique un programme en le placant dans  /etc/rc.local, est-ce facilement contournable ? Je veux dire, par exemple, une personne mal attentionnée (non non je ne suis pas parano...) pourrait-elle démarrer en mode single-user ou afficher le prompt du chargeur (ou toute autre processus visant à contourner l'exécution du programme) et aller modifier le  /etc/rc.local ?
Merci ! Wink

D'une façon générale, la sécurité «tout court» inclut la sécurité physique… donc empêcher l'accès à la machine. Après, tu peux quand même «blinder» un peu (flagger la console en «insecure» dans ttys(8), chiffrer le disque, etc.)
Back to top
 
 
IP Logged
 
Ecureuil
Full Member
***
Offline


I Love BSD!

Posts: 131
Re: Exécution automatique d'un programme
Reply #6 - 27. Nov 2008 at 09:27
 
fgudin wrote on 27. Nov 2008 at 08:55:
Ecureuil wrote on 27. Nov 2008 at 08:25:
1 - Qu'est-ce qu'une expression recouvrante ? Y a-t-il un risque à l'employer ? (Ok, là ça fait deux questions en une, je triche un peu...)

La formule est étrange, mais bon… ros veut simplement attirer ton attention sur le fait qu'exec(2) remplace le processus courant (il faut donc forker avant).


Bonjour francis, que veux-tu dire par remplacer le processus courant ?
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...

fgudin wrote on 27. Nov 2008 at 08:55:
Ecureuil wrote on 27. Nov 2008 at 08:25:
2 - Au niveau sécurité, le fait de faire exécuter de façon automatique un programme en le placant dans  /etc/rc.local, est-ce facilement contournable ? Je veux dire, par exemple, une personne mal attentionnée (non non je ne suis pas parano...) pourrait-elle démarrer en mode single-user ou afficher le prompt du chargeur (ou toute autre processus visant à contourner l'exécution du programme) et aller modifier le  /etc/rc.local ?
Merci ! Wink

D'une façon générale, la sécurité «tout court» inclut la sécurité physique… donc empêcher l'accès à la machine. Après, tu peux quand même «blinder» un peu (flagger la console en «insecure» dans ttys(8), chiffrer le disque, etc.)


Ok, merci francis pour toutes ces infos, je vais m'atteler à tout cela...

Pour finir, dans /etc/rc.local, est-il possible de faire exécuter un programme en C en indiquant le plus simplement du monde le nom du dit programme ou bien doit-on le faire exécuter en l'appelant dans un script ?

Je crois que les journées à venir vont êtres longues, mais longues... Huh

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



Posts: 868
Paris
Gender: male
Re: Exécution automatique d'un programme
Reply #7 - 27. Nov 2008 at 12:38
 
Salut,
Je t'avoues que ça risque d'être difficile si on doit repasser les bases de la programmation UNIX.
Je te renvoies don sur ce site qui à pas l'air trop mal.

http://drocourt.iut-amiens.fr/cours/Unix/C-Programmation_Systeme/prog_sys.xhtml
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 #8 - 27. Nov 2008 at 13:02
 
Euh... Ros tu veux me plomber le moral là où quoi ?!? Shocked
Je sais bien qu'il va falloir que j'en passe par là, j'ai d'ailleurs acheté un bouquin à cet effet (Programmation système en C sous Linux) mais là il me faut parer au plus pressé...

Je "n'ai besoin que de quelques infos pertinantes" pour dégrossir et me mettre sur les rails pour pondre ce que l'on me demande.

Ma question: dans /etc/rc.local, est-il possible de faire exécuter un programme en C en indiquant le plus simplement du monde le nom du dit programme ou bien doit-on le faire exécuter en l'appelant dans un script ?
Merci. Wink
Back to top
 
 
IP Logged
 
ros
Global Moderator
*****
Offline



Posts: 868
Paris
Gender: male
Re: Exécution automatique d'un programme
Reply #9 - 27. Nov 2008 at 13:33
 
La réponse est oui, on peut. Un script n'est finalement qu'un appel implicite à un binaire (p.ex /bin/sh) avec comme paramètre le fichier de script à éxecuter.

par exemple l'appel à
Code:
/usr/scripts/do_somephing.sh 


est équivalent à
Code:
/bin/sh /usr/scripts/do_somephing.sh 



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 #10 - 27. Nov 2008 at 14:18
 
Merci à toi Ros.
Si j'ai bien compris, je peux donc tout aussi bien dans mon /etc/rc.local faire  un...:
Code:
/usr/script/mon_programme 


...là où mon_programme est un exécutable généré à partir d'un fichier source C ?
Back to top
 
 
IP Logged
 
ros
Global Moderator
*****
Offline



Posts: 868
Paris
Gender: male
Re: Exécution automatique d'un programme
Reply #11 - 27. Nov 2008 at 16:45
 
Non tu dois la compiler avant avec la commande suivante

Code:
cc monprograme.c -o monprogramme 



puis le copier la ou ça va bien et l'appeler depuis 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 #12 - 27. Nov 2008 at 17:06
 
ros wrote on 27. Nov 2008 at 16:45:
Non tu dois la compiler avant avec la commande suivante

Code:
cc monprograme.c -o monprogramme 



puis le copier la ou ça va bien et l'appeler depuis rc.local

Ok, compiler, ça, je savais qu'il fallait le faire ! Grin
Merci Ros.

J'essaie d'avancer un peu, j'ai fait plusieurs choses:

1  - J'ai crée dans /etc le fichier rc.local et mis dedans la commande suivante:
Code:
/usr/sbin/dmidecode > /usr/home/admin/info_sys.txt 


J'ai rebooté et j'ai bien obtenu le résultat attendu, à savoir un joli petit fichier texte avec plein d'infos hardware sur ma machine.

2 - Comme je souhaite par la suite lire le fichier ainsi généré, je me suis dit que j'allais faire ça au travers d'un petit programme de rien du tout en C, sauf que de bien entendu, y a comme une couille dans le potage (non, vraiment...?!?).
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
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 #13 - 27. Nov 2008 at 17:22
 
(pressé, désolé…)
fork() puis exec(), ou encore system()
Back to top
 
 
IP Logged
 
Ecureuil
Full Member
***
Offline


I Love BSD!

Posts: 131
Re: Exécution automatique d'un programme
Reply #14 - 27. Nov 2008 at 17:48
 
fgudin wrote on 27. Nov 2008 at 17:22:
(pressé, désolé…)

Ne sois surtout pas désolé d'être pressé, c'est déjà bien sympa à vous tous de donner un coup de pouce à un newbie like me, même si c'est le but d'un forum je vous l'accorde, mais cela n'empêche pas...
Donc merci encore. Wink

fgudin wrote on 27. Nov 2008 at 17:22:
fork() puis exec(), ou encore system()

J'ai donc rajouté un fork() avant ma ligne execl(...), même combat, pas de fichier info_sys.txt généré et dmidecode qui se lance dans l'interpréteur quand j'exécute mon programme.
Back to top
 
 
IP Logged
 
Pages: 1 2 3