Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 09/12/2012, à 15:52

Deepthroat04

[Programme C] non-blocking de la fonction system()

Bonjour,

Je lance un processus depuis mon programme C via la fonction system().

Le probleme c'est que le programme se bloque car il attend que le processus lui retourne quelque chose.

Comment faire en sorte que le programme (en C) continu, sans que le processus lui retourne qqchose?

Jai entendu parler de la fonction fork() et exec() mais je ne vois pas trop comment les utiliser...

Cordialement,

Hors ligne

#2 Le 09/12/2012, à 16:41

Haleth

Re : [Programme C] non-blocking de la fonction system()

Ben, par exemple:

pid_t pid = fork();
if(pid == 0)
     exec('/bin/ls', 'ls');

Ce code execute /bin/ls en parallèle du programme principal.
Regarde le man pour plus d'info (man fork & man exec)


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#3 Le 09/12/2012, à 23:35

Deepthroat04

Re : [Programme C] non-blocking de la fonction system()

Je testerai cela demain smile
merci beaucoup

Hors ligne

#4 Le 10/12/2012, à 20:20

Deepthroat04

Re : [Programme C] non-blocking de la fonction system()

J'ai une question : Le "/bin/ls" est spécifique a la commande ls non?

Hors ligne

#5 Le 10/12/2012, à 20:20

Haleth

Re : [Programme C] non-blocking de la fonction system()

Bawi
Il faut le remplacer par le chemin du fichier à executer.


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#6 Le 10/12/2012, à 20:51

Deepthroat04

Re : [Programme C] non-blocking de la fonction system()

d'accord, je comprend un peu mieux...
mais quand tu fais la commande "exec" ça ne peut pas marcher...
car exec est une famille de fonction... mais laquelle choisir pour mon ls? (ex : execvpe, execl ....)

Hors ligne

#7 Le 10/12/2012, à 20:52

Haleth

Re : [Programme C] non-blocking de la fonction system()

J'ai écrit exec ?
Mea culpa, je voulais dire: execl

http://www.linux-kheops.com/doc/man/man … xec.3.html


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#8 Le 10/12/2012, à 21:00

Deepthroat04

Re : [Programme C] non-blocking de la fonction system()

Donc on se retrouve avec ça :

pid_t pid = fork();
   
    if(pid == 0)
    {
        execl("/bin/ls", "ls");
    }

mais cela ne fonctionne pas dans mon main :
"warning: not enough variable arguments to fit a sentinel"

Hors ligne

#9 Le 10/12/2012, à 21:02

Deepthroat04

Re : [Programme C] non-blocking de la fonction system()

mais juste une question, c'est quoi le type du fichier "/bin/ls", "ls" a une extension genre .txt?

Hors ligne

#10 Le 10/12/2012, à 21:05

Haleth

Re : [Programme C] non-blocking de la fonction system()

En effet, il faut mettre une liste de paramètre, même si elle est null:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
        pid_t pid = fork();
        if(pid == 0)
                execl("/bin/ls", "ls", NULL);
}

mais juste une question, c'est quoi le type du fichier "/bin/ls", "ls" a une extension genre .txt?

C'est un binaire. Tu peux l'appeller /bin/ls.txt si tu veux (m'enfin, j'te conseille de ne pas toucher à ce fichier..)


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#11 Le 10/12/2012, à 21:07

Deepthroat04

Re : [Programme C] non-blocking de la fonction system()

Ah la cte NULL!
c'est difficile de savoir qu'il fallait mettre un "NULL"! xD

Hors ligne

#12 Le 10/12/2012, à 21:12

Deepthroat04

Re : [Programme C] non-blocking de la fonction system()

gratias tibi, tu m'as bien aidé! smile

Bonne soirée, dans la joie et la bonne humeur.

Hors ligne

Haut de page ↑