Lancer un script shell dans un programme c

Lancer un script shell dans un programme c - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 01-09-2008 à 11:03:57    

Bonjour, est-il possible d'executer un script shell dans un programme c ? Si oui peut-on aussi passer des paramettres à ce script via le code c (OS:linux) ?
Merci d'avance.

Reply

Marsh Posté le 01-09-2008 à 11:03:57   

Reply

Marsh Posté le 01-09-2008 à 11:17:01    

oui
oui
man exec  
http://pwet.fr/man/linux/fonctions_bibliotheques/exec


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 01-09-2008 à 11:22:36    

Merci merci, autre question
à l'execution de ce programme c, le programme attend que l'execution du script se termine pour continuer son execution ou non ?

Reply

Marsh Posté le 01-09-2008 à 11:26:42    

pas nécessairement :spamafote:
tu peux forker pour faire une exécution en parallèle aussi [:mrbrelle]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 01-09-2008 à 11:35:19    

Merci

Reply

Marsh Posté le 01-09-2008 à 11:36:59    

Suivant ce que tu veux, tu peux utiliser :
- system()
- popen()
- fork()/execve()
- fork()/execve()/wait()

Reply

Marsh Posté le 01-09-2008 à 11:38:21    

Un petit de lecture :
http://www.dil.univ-mrs.fr/~massat [...] hread.html
http://www.yolinux.com/TUTORIALS/L [...] reads.html
http://www.advancedlinuxprogrammin [...] p4:threads


Message édité par o'gure le 01-09-2008 à 11:38:33

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 01-09-2008 à 11:55:20    

Mon programme recoit des donnees en temps reel d'une sonde, j'utilise l'objet fork evidement dans le traitement de mes sockets. Le programme marche bien. Mais pour le traitement de la bdd on avait fait un script (exec cron 1 fois/min), aujourd'hui on voudrait que ce script s'execute à chaque fois que la sonde envoie une donnée (2 à 3 donnees/s). Est ce une bonne idée d'executer ce script (50 requetes sur une base de 4000 membres) 3 fois par seconde ? (execution obligatoire pour chaque changement)

Reply

Marsh Posté le 01-09-2008 à 16:47:13    

J'ai un probleme avec ce programme car lorsque le script est executé, vu la fréquence d'execution du programme c, un deuxieme script s'execute ce qui fait bloquer mon programme. Que dois-je faire ?

Reply

Marsh Posté le 01-09-2008 à 16:54:25    

ça dépend de la DB :spamafote:


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 01-09-2008 à 16:54:25   

Reply

Marsh Posté le 01-09-2008 à 16:56:03    

C'est quoi DB ? --> base de donnée (mysql)

Reply

Marsh Posté le 01-09-2008 à 16:59:15    

Est-il possible de dire au processus d'attendre que le script soit terminé.
Le mieux serait de mettre l'execution des scripts dans une file d'attente en d'autre terme le tread ou processus (script) attend chacun son tour.
C'est faisable ça ?

Reply

Marsh Posté le 01-09-2008 à 17:04:33    

majong a écrit :

Est-il possible de dire au processus d'attendre que le script soit terminé.
Le mieux serait de mettre l'execution des scripts dans une file d'attente en d'autre terme le tread ou processus (script) attend chacun son tour.
C'est faisable ça ?


Oui avec des sémaphores

Reply

Marsh Posté le 01-09-2008 à 17:06:23    

majong a écrit :

C'est quoi DB ? --> base de donnée (mysql)


 
alors linkes ton programme avec mysql, ou bien gères plus intelligemment tes accès BDD.


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 01-09-2008 à 17:10:02    

black_lord a écrit :


 
alors linkes ton programme avec mysql, ou bien gères plus intelligemment tes accès BDD.


Ou alors essaye de passer un truc plus optimisé/rapide et qui supporte de gros trafic tel que postgresql

Reply

Marsh Posté le 01-09-2008 à 17:14:24    

Oui je crois que j'ai pas trop le choix, l'utilisation des sémaphores me dépasse.

Reply

Marsh Posté le 01-09-2008 à 17:25:42    

zeblods a écrit :


Ou alors essaye de passer un truc plus optimisé/rapide et qui supporte de gros trafic tel que postgresql


 
[:kiki]
 
et le coup d'après il prend une plus grosse machine ? Faut pas dire n'importe quoi non plus hein... Mysql supporte très bien des centaines d'insert/seconde...


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 02-09-2008 à 15:00:28    

black_lord a écrit :

alors linkes ton programme avec mysql, ou bien gères plus intelligemment tes accès BDD.

+1
 

black_lord a écrit :

[:kiki]
 
et le coup d'après il prend une plus grosse machine ? Faut pas dire n'importe quoi non plus hein... Mysql supporte très bien des centaines d'insert/seconde...

+1
 
Une solution intermédiaire entre le shell-script appelé plein de fois (=> pourri en perfs) et le link de mysql dans ton prog C (=> très performant mais pas forcément simple) pourrait être de continuer à utiliser un script externe (genre en perl ou python) pour gérer tes insertions, mais sans respawner un nouveau process à chaque fois.
 
Genre ton programme principal forke au départ et recouvre son fils avec un script perl. Ensuite, les deux processus communiquent par pipes ou sockets pour se transmettre les données provenant de la BDD.
 
De toutes façons, pour traiter quelques requetes par secondes, pas besoin d'une usine à gaz...


---------------
TriScale innov
Reply

Marsh Posté le 02-09-2008 à 16:16:00    

[:romf]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed