Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » return int-value from a subprogram

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
12.12.2003, 13:29 Uhr
virtual
Sexiest Bit alive
(Operator)


@Jochen:
Nochmal: wenn Du execv aufrufst, wird Dein Programm ersetzt durch das, was du mit execv aufrufst. Alles wird ersetzt. Nach dem execv kehrst Du also nie mehr in dein Clientprogramm zurück! Der Rückgabewert von dem Childprocess entspricht damit dem Rückgabewert von ping.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
12.12.2003, 13:48 Uhr
~Jochen
Gast


Ah, das hatte ich nicht genau verstanden. Ok, das heißt ich rufe

execv(ping 192.168.0.1 -c1;a=$?;echo $a,NULL);

auf und mein return wert wäre in diesem Fall der letzte Wert der in den stdio geschrieben wurde, also 0 oder 1. Für einen erfolgreichen oder nicht erfolgreichen ping.

Wie kann nach dem Befehl warten, bis der execv komplett ausgeführt wurde?

Jochen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
12.12.2003, 13:50 Uhr
typecast
aka loddab
(Operator)


Nein was du machen kannst, ist mir fork einen Kindprozess zu erzeugen, diesen Kindprozess mit exec(blabla) zu überlagern und dann den Rückgabewert des Kindes zu überprüfen.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
12.12.2003, 14:22 Uhr
~Jochen
Gast


Ich habe trotzdem noch eine Frage

Wie kann ich, wenn ich den child process mit execv überlagern und zusätzlich diesen dazu bringen, dass er wartet bis die 5 sekunden für den erfolglosen ping Abruf beendet sind und wo mache ich den execv Aufruf?


Danke für deine Hilfe, ich denke ohne wäre ich ziemlich aufgeschmissen!

Jochen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
12.12.2003, 14:27 Uhr
typecast
aka loddab
(Operator)


Ok du kannst ping mit der Option -t eine Timeoutzeit mitgeben. Diese bestimmt wie lange gewartet werden soll, bis man erfolglos abbricht.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
12.12.2003, 14:32 Uhr
typecast
aka loddab
(Operator)


Oh zweite Frage nicht gelesen. Hier mal ein kleines Beispiel:

C++:
switch (pid = fork())
{
  case -1: printf("Konnte keinen Kindprozess erzeugen!")
              exit(1);
  case 0: // Hier der Code für den Kindprozess!
             break;
  default: // Hier der Code für den Elternprozess es bietet sich folgendes an:
             if ( wait(&w) != pid)
                   // Hier lief was schief
             // so hier ist der Kindprozess fertig. Der Rückgabewert steht in w
}



Hoffe das hilft dir weiter.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
12.12.2003, 18:49 Uhr
~Jochen
Gast


Hi,

Das mit der Switch ist schon klar, nur habe ich das Problem, dass ich den ping command nicht abwarten kann und somit keinen return wert in tstat bekomme. Dies kann ich demzufolge dann auch nicht abfragen.

Jochen

C++:

    for (ii = 0; ii < MAX_PROCS; ++ii)
    {
        pid = fork();
        switch(pid)
        {
        case -1:
            perror("fork failed");
            child_running[ii] = 0;
            break;
        case 0:
        printf("I'm child #%d\n ", ii);
        int a;

/*******************************Insert a part which changes the value of
done later
********************************1-254 depending on ii***************************/



        a=execv("ping 192.168.0.1 -c1;a=$?;echo $a",NULL);
        wait(&a);     //???  want to get the value 0 or 1 depending on ping
/*******************************default value a = 1*****************************/
a = 1;
/*******************************************************************************/

/*******************************The return value will finally be written to a ***
********************************variable a. The exit value a can than be ********
********************************checked with tstat.*****************************/

        exit(a);
        default:
            children[ii] = pid;
            child_running[ii] = 1;
            break;
        }
    }



    running = MAX_PROCS;
    while (running) {

        pid = wait(&tstat);
    for (ii = 0; ii < MAX_PROCS; ++ii) {

/*******************************determine which child***************************/
            
     if (pid == children[ii]) {

/********************************child done. the success or unsuccessfull test***
*********************************of the ping command is written in**************/

          valid_ip = tstat/MAX_PROCS;
             child_running [ii] = valid_ip;
               running--;
                printf("child ii#%d pid#%d a:%i finished\n", ii, pid,valid_ip);
            }
        }
    }

/********************************a loop which checks if the number is a 1 or a 0*
*********************************depending on a (un)successfull ping************/

    for(ii = 0; ii < MAX_PROCS; ii++){
    if(child_running[ii] == 1){
        printf("192.168.0.%d is a valid ip\n",ii);
    }
    else{
         printf("192.168.0.%d is not a valid ip\n",ii);        
    }
    }
exit(0);
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: