Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    25

    [C] execlp e current directory__help!!

    salve a tutti,
    so che questo argomento è gia stato trattato ma non ne riesco a venire a capo
    ho un problema nell'execlp di un file nella stessa directory che pero non va. chiarisco con codice:

    >file es1.c<

    #include <stdlib.h>
    #include <signal.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <errno.h>

    int
    main (int argc, char *argv[])
    {
    int pid;

    if((pid=fork())<0) perror("errore nella fork()");
    if (pid == 0)
    {
    execl("./es1figlio.o","es1figlio.o", (char*)0);
    printf("Errore execlp\n");
    }

    }
    >end file es1.c<

    lo compilo con gcc -o es1.o es1.c

    >file es1figlio.c(nella stessa directory)<
    int
    main (int argc, char *argv[])
    {
    printf("\nHello\n");
    }
    >end file es1figlio.c<
    lo compilo con gcc -o es1figlio.o es1figlio.c


    S.O. usato ubuntu 8.04

    all'esecuzione di
    ./es1.o

    ottengo
    "Errore execlp"

    overo l'exec non va buon fine.Mi aiutate a capire dove sbaglio?
    grazie.

  2. #2
    non saprei cosa dirti, ti deve funzionare.
    Controlla che tutti i file siano stati scritti correttamente ed esegui il programma dalla stessa directory dove sono memorizzati.
    Un appunto, non chiamare l'eseguibile .o , in quanto normalmente sono i file oggetto che hanno quella estensione. Non è necessario che tu dia una estensione all'eseguibile.
    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    25
    Ora capisci il mio dilemma..
    DOVREBBE funzionare... ma non funge.
    tutti i test fatti..
    Altre idee? :master:

  4. #4
    Utente di HTML.it L'avatar di 810106
    Registrato dal
    Jun 2008
    Messaggi
    67

    Forse...

    Intanto usa nomi differenti
    codice:
    gcc -o es1 es1.c
    gcc -o es1figlio esi.figlio.c
    codice:
    if((pid=fork())<0) 
      perror("errore nella fork()");
    if (pid == 0)
      {
         if(execl("./es1figlio","es1figlio", (char*)0) == -1)
           perror("execl");
      }
    Prova cosi... almeno se fallisce ti da un messaggio di errore piu specifico...

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    25
    fatto ma come è ovvio che sia...nada.

    Ho risolto alternativamente, anche se la mia soluzione non è per niene pulita come la prima ma più una sorta di artefatto...

    int
    main (int argc, char *argv[])
    {
    int pid,stato;
    char * pPath;
    char * filename="es1figlio";
    char tmp[100];
    pPath = getenv ("PWD");//prendo path corrente
    sprintf(tmp,"%s/%s\0",pPath,filename);

    if((pid=fork())<0) perror("errore nella fork()");
    if (pid == 0)
    {
    printf("exec del figlio \n");
    if((stato=execl(tmp,filename,0))<0) perror("Errore nell'esecuzione di execlp!!!\n");
    }

    }

    in pratica prendo la variabile dall'environnement.
    Non è una soluzione che mi fa impazzire a funziona per lo scopo.
    Qualcuno saprebbe aiutarmi sulla soluzione precedente?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    25
    Bho misteri della fede...
    mo funziona pure cosi


    int
    main (int argc, char *argv[])
    {
    int pid,stato;
    char * filename="es1figlio";
    char tmp[100];
    sprintf(tmp,"./%s\0",filename);

    if((pid=fork())<0) perror("errore nella fork()");
    if (pid == 0)
    {
    printf("exec del figlio \n");
    if((stato=execl(tmp,filename,0))<0) perror("Errore nell'esecuzione di execlp!!!\n");
    }

    }

  7. #7
    Utente di HTML.it L'avatar di 810106
    Registrato dal
    Jun 2008
    Messaggi
    67
    Questo è il tuo codice iniziale:
    codice:
    ...
    if (pid == 0)
    {
      execl("./es1figlio.o","es1figlio.o", (char*)0);
      printf("Errore execlp\n"); /*** Sbaglio o manca un if? ***/
    }
    ...
    Questo è il tuo nuovo codice:
    codice:
    ...
    if (pid == 0)
    {
      printf("exec del figlio \n");
      if((stato=execl(tmp,filename,0))<0) perror("Errore nell'esecuzione di execlp!!!\n"); /*** QA C'E IF(...) */
    }
    ...
    Sarà mica questo il problema???
    Free software: free as freedom!

  8. #8
    no, non c'entra, l'istruzione che segue l'istruzione execl (e anche le altre della famiglia exec) viene eseguita solo se questa fallisce, altrimenti il controllo passa al nuovo processo.
    ciao
    sergio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.