Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/03/2008, à 11:21

SamueLinux

[C/GTK+] Utilisation de script shell

Bonjour à toute la communauté, :D

dans mon programme coder en C et en GTK+, j'utilise un script shell pour executer certaines commandes pour un gain de temps, mais comment faire en sorte de bloquer le processus ! Je m'explique !

Par exemple, mon programme télécharge un page grâce à l'outil wget, j'ai coder un petit script shell qui fait sa et qui enregistre le lien vers le fichier a afficher dans un fichier que je recupere apres dans mon programme C, mais le problème c'est que le script shell peut mettre quelques secondes a recevoir la page alors que mon programme continu, tente d'ouvrir le fichier mais il n'y a rien dedans, donc il charge une page vide et boum seg fault !!!

Ma question est donc, comment faire pour attendre la fin de l'execution du script shell, etant donné qu'il y a aussi la boucle infinie de GTK+ qui me pose problème !:/

Merci à tous !

Hors ligne

#2 Le 29/03/2008, à 11:33

maskott

Re : [C/GTK+] Utilisation de script shell

si tu mets ta commande system() dans un processus fils?

if fork()==0
{
system(...);
}

excuse moi pour la syntaxe ça fait longtemps


Backups are for wimps. Real men upload their work to an ftp server and have everybody mirror it. - Linus Torvalds
                                                                               
[RESOLU] dans les posts qui le sont, merci
(Et si vous y arrivez tout seul, indiquez aussi la solution, remerci)

Hors ligne

#3 Le 29/03/2008, à 11:35

SamueLinux

Re : [C/GTK+] Utilisation de script shell

Oui, ok merci, je vais regarder de ce côter je te tiens au courant !

Hors ligne

#4 Le 29/03/2008, à 12:41

philou8237

Re : [C/GTK+] Utilisation de script shell

En faisant un peu plus propre :

int pid = -1;
int child_res = 0;

pid = fork();
if (pid == 0) // process fils
{
  execp(...); // execute la commande du fils
  perror("execp"); // cette ligne ne devrait jamais s'éxecuter
  exit(1);
}
else // process pere
{
  wait(&child_res); // attente de la fin du fils
  ... suite de ton prog
}

Pour plus d'info :
man execp
man wait

Dernière modification par philou8237 (Le 29/03/2008, à 12:42)

Hors ligne