tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
247
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Krikus Krikus ist offline Mitglied Silber
    Registriert seit
    Jan 2009
    Beiträge
    64
    Hallo zusammen,

    ich bräuchte einmal Eure Hilfe. Ich verstehe so einige Zeilen Code in einem Programm nicht.

    Hier erst einmal der Code:

    Code c:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    //Socket wird generiert etc
    .........
     
      (void) signal(SIGCHLD, reaper);
     
      while (1)
        {
          client_len = sizeof(client_addr);
          newsockfd = accept(sockfd, &client_addr, &client_len); //Verbindung akzeptieren, ist eine Blocking Call
          if (newsockfd < 0) 
        {
          perror("accept");
          exit(1);
        }
      
          pid = fork(); //erstellt einen Child-Prozess. //returns 0, we are in the child process. 
    //returns a positive number, we are in the parent process (the fork return value is the PID of the newly created child process).
     
     
          
          if (pid == 0)
        {
          close(0); //close stdin ****?
          close(1);
          close(2);
          
          dup(newsockfd);
          dup(newsockfd);
          dup(newsockfd);
          close(newsockfd);
          
         //testfunktion();
          fflush(stdout);
          close(0);
          close(1);
          close(2);
          
          exit(0);
        }
          close(newsockfd);
        }
    .....

    Meine erste Frage, wozu wird die signal() Funktion benötigt.

    Danach springt das Programm in die While-Schleife und wartet auf eine eingehende Verbindung und akzeptiert diese. Dann wird ein Child-Prozess mit fork() erstellt, damit der Parent-Prozess nicht blockiert und weitere Anfragen entgegen nehmen kann.
    In dem Child-Process wird nun in die if-Bedingung gesprungen.
    Was nun dort mit den close() und dup() gemeint ist, weiß ich nicht und müsste mir einer erklären.


    Gruß

    Krikus
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Mit signal kann man auf Signale reagieren, es wird dann die gegebene Funktion aufgerufen.

    Ja, die close aufrufen schließen stdin, stdout und stderr (welche vom Eltenprozeß geerbt wurden).

    Die dup aufrufen setzen stdin, stdout und stderr auf eine Kopie von newsockfd.

    Also wird z.B. bei printf nicht auf die Konsole (normale Standardausgabe) geschrieben, sondern auf den Socket.

    Das steht doch aber alles in den Manpages...

    Warum suchst du denn nicht mal?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 03.03.11, 17:09
  2. Close
    Von TheLamer im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 25.10.05, 15:50
  3. self.close
    Von corsanostra im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 15.05.03, 17:40
  4. self.close();
    Von phpinfo im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 20.04.03, 16:04
  5. close()
    Von TaJ im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 02.08.02, 00:20