[C] system() valeur retournée

Résolu
Bonjour,
dans mon prog C je lance une application depuis la fonction system(). Comment faire pour gérer les erreurs, exemple lorsque l'application est introuvable ? Sous linux une valeur est renvoyée mais la sous windows je test de comparer la valeur renvoyée à un int mais il y a une erreur à la compilation. Merci ;)
Configuration: Windows
Firefox 3.5.2

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Évite system() et oriente toi plutôt vers la famille des exec
    1. Contributeur
      la famille des spawn ne serait elle pas mieux dans ce cas ?
      Par contre, il faut savoir si tu veux conserver la portabilité du programme (comme tu parle de Linux).
      1. mon programme s'utilisera uniquement sur windows donc pas de problème avec linux ;)
        Je pensais qu'il y aurai un ti -1 de retourné en cas d'erreur ^^ domage, mais la fonction system de windows ne renvoie rien ? j'ai pas trouvé sur google(sauf celle de linux)

        merci beaucoup
        1. Sous Windows, on n'utilise jamais system(),
          ni spawn ou exec , mais les apis Shell ou Kernel (elles sont faites pour ça justement)
          Voir sur le groupe classique des apis windows (https://www.ovh.co.uk/mail/ ) pour le code officiel (Microsoft)
          1. Modérateur
            Regarde dans les deux liens exec et spawn qu'on t'a donné hier.
            Il y a dans chacun un programme d'exemple.

            Par exemple si tu créé un programme D:\hello.exe qui affiche "Hello World !".
            Et que tu compiles les deux programmes D:\crt_exec.exe et D:\crt_spawn.exe

            En ligne de commandes tu auras :
            D:\>crt_exec hello.exe 1
            Hello World !
            
            D:\>crt_spawn 1 hello.exe
            Hello World !
            from SPAWN!
            Le "1" est une option qui utilise respectivement _execl et _spawnl, mais tu peux la faire varier de 1 à 8 pour utiliser les différentes fonctions des deux familles, et ainsi choisir celle qui t'es le plus adaptée en fonction de son comportement et des paramètres qu'elle nécessite.

            Remarque pour compiler :
            Dans crt_exec.c j'ai du rajouter stdlib.h et modifier return; en return 1;
            Dans crt_spawn.c j'ai du modifier exit(1); en return 1;