Lancer un script shell dans un programme c - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 01-09-2008 à 11:17:01
oui
oui
man exec
http://pwet.fr/man/linux/fonctions_bibliotheques/exec
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 ?
Marsh Posté le 01-09-2008 à 11:26:42
pas nécessairement
tu peux forker pour faire une exécution en parallèle aussi
Marsh Posté le 01-09-2008 à 11:36:59
Suivant ce que tu veux, tu peux utiliser :
- system()
- popen()
- fork()/execve()
- fork()/execve()/wait()
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
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)
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 ?
Marsh Posté le 01-09-2008 à 16:54:25
ça dépend de la DB
Marsh Posté le 01-09-2008 à 16:56:03
ReplyMarsh 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 ?
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é. |
Oui avec des sémaphores
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.
Marsh Posté le 01-09-2008 à 17:10:02
black_lord a écrit : |
Ou alors essaye de passer un truc plus optimisé/rapide et qui supporte de gros trafic tel que postgresql
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.
Marsh Posté le 01-09-2008 à 17:25:42
zeblods a écrit : |
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...
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 : |
+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...
Marsh Posté le 02-09-2008 à 16:16:00
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.