2016-11-23 3 views
-5

, warum ich nichtMühe, Programm in c mit unter Linux

int main(char* name,int arg0,int arg1) 
{ 
    name = "/u/e2014/Desktop/os/Prog.c"; 
    arg0 = 0; 
    arg1 = 1; 

    char my_args[3]; 
    my_args[0] = arg0; 
    my_args[1] = arg1; 
    my_args[2] = NULL; 
    execl(name,m_args); 

    return(0); 
    } 

enter image description here

gelingen soll ich möchte, dass mein Programm wird das Programm im Pfad „name“ auszuführen. Jetzt tut es nichts.

Ich verstehe nicht, wo ist mein Fehler? Ich programmiere in C auf Linux, und kompiliere es mit gcc

Vielen Dank !!

+1

Was auf der Erde waren Sie * erwartet * dieses Programm machen?? –

+0

zum Ausführen des Programms in name = "/u/e2014/Desktop/os/Prog.c" – LIMA

+0

Sie haben die falsche Deklaration von 'main', und die falschen Parameter für' execl'. Welche Parameter sollen Sie an dieses andere Programm weitergeben? – Joni

Antwort

1

gcc hat 3 verschiedene Signatur für Hauptfunktion

int main(void); 
int main(int argc, char* argv[]); 
int main(int argc, char *argv[], char *envp[]); 

Ihre Hauptfunktion auch nicht davon entspricht. daher Compilerfehler.

Für Ihren Fall können Sie die 2. Signatur mit einer kleinen Änderung verwenden.

#include <stdlib.h> 

int main(int argc, char **argv) 
{ 
    char *path; 
    int int1, int2; 

    path = argv[1]; 
    int1 = atoi(argv[2]); 
    int2 = atoi(argv[3]); 
} 
+0

ok, also jetzt ist es komplizierter. Ich möchte zu main übergeben: Pfad der Datei und zwei ganze Zahlen. mit dieser signatur kann ich nicht sehen, wie ich das machen kann ...:/ – LIMA

+0

ich muss zwei integer an main übergeben: diese signatur sein o.k? : int main (int argc, int argc1, char ** argv), weil ich nach Informationen über diese Signatur mit 2 Parametern suche und ich bin nicht finden – LIMA

+0

vielen Dank !! – LIMA

0

Zuerst übergeben Sie falsche Parameter in int main(). main() hat nur mindestens 3 Argumente.

int main (intargc, char * argv [], char * envp []);

Um Ihr Programm auszuführen, sollten Sie execvp() verwenden, weil Sie arrey of char * not Befehlszeilenargumente über ein Variablenargument übergeben.

Unterschied zwischen execl und execv?

** L vs V: einzelne Parameter im Aufruf (variable Argumentliste): ob Sie die Parameter zum exec'ed Programm als

L übergeben wollen execl(), execle(), execlp() und execlpe() V: als ein Array von char * execv(), execve(), execvp() und execvpe() **

#include <stdio.h> 
#include <unistd.h> 

int main(int argc,char*argv[]) 
{ 
    char *name = "/root/a.out"; 
    char *arg0 = "0"; 
    char *arg1 = "1"; 

    char *my_args[4]; 

    my_args[0] = name; 
    my_args[1] = arg0; 
    my_args[2] = arg1; 
    my_args[3] = NULL; 
    execvp(my_args[0],my_args); 

    return(0); 
    } 
+0

Diese Signatur wird kompiliert: int main (int argc, int argc1, char * argv []), weil ich zwei ganze Zahlen brauche – LIMA

+0

@LilachDery nein wird es nicht funktionieren.wenn du integer willst, musst du int von argv konvertieren, wie Samuel Robert in 2 Antworten auf deine Frage. –