2017-03-23 2 views
1

J'ai deux programmes C, Project1A.c et Project1B.c. J'essaie d'utiliser execl() pour exécuter Project1A à partir de Project1B mais jusqu'à présent cela ne fonctionne pas.Comment appeler un programme C à partir d'un autre programme C

Project1B.c

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main() 
{ 
    pid_t pid; 

    switch((pid = fork())) 
    { 
    case -1: 
     printf("I'm sorry, fork failed\n"); 
     break; 
    case 0: 
     execl("Project1A.c", "./prog", NULL); 
     printf("EXECL Unsucessfull"); 
     break; 
    default: 
     printf("This is some parent code\n"); 
     break; 
    } 
    printf("End of Program\n"); 

    return 0; 
} 
+7

Vous ne pouvez pas exécuter un fichier source C. Vous devez exécuter un programme compilé. –

+1

Vous devez attendre le processus enfant, ainsi que la valeur de retour test de exec si une erreur s'est produite. – dmi

+1

Un "programme C" a très peu à voir avec les ordinateurs. C'est une description abstraite des instructions pour une machine abstraite. D'un autre côté, un programme *, pour de vrais ordinateurs, a très peu à voir avec C. Un programme est juste un programme. C est juste un moyen de * créer * des programmes, mais cela ne fait pas partie du résultat. –

Répondre

0

I beleive vous pouvez trouver réponse ici, il est donc une double question: How do I execute external program within C code in linux with arguments?

Mais de toute façon que Erik a déclaré dans cette réponse: https://stackoverflow.com/a/5237520/7194344

Utilisation system():

int status = system("./foo 1 2 3"); 

EDIT: comme il a été signalé pour moi, la solution de travail devrait être de compiler le fichier source première et que l'exécuter comme indiqué dans la réponse de Lunar utilisant execl("prog1A" NULL);

+0

'system' n'exécutera toujours pas un fichier source C. –

+0

C'est vrai, mais vous pouvez l'utiliser pour compiler le fichier source et l'exécuter –

2

execl exécute un fichier binaire , ce qui signifie que vous ne pouvez pas passer Project1A.c et attendez-vous à ce qu'il fonctionne. Vous devez le compiler et exécuter le programme de compilation.

Les arguments suivants de la fonction sont des arguments de ligne de commande, terminés par NULL. Cela signifie que votre appel execl correspond à ./Project1A.c ./prog sur un shell, ce qui ne fonctionne évidemment pas. Au lieu de cela, votre appel execl devrait être: execl("prog1A", NULL);. Sur un côté, vous pouvez peut-être exécuter le code C en exécutant d'abord la commande de compilation en utilisant la fonction système, puis en exécutant le programme compilé avec execl si la compilation a réussi.