Geforkter Prozess laesst mich keine Eingabe taetigen

Dieses Thema im Forum "C/C++" wurde erstellt von musiKk, 22.05.2007.

  1. musiKk

    musiKk Dr. Strangelove

    Dabei seit:
    30.07.2006
    Beiträge:
    264
    Zustimmungen:
    0
    Ort:
    Leipzig
    Hallo, mein Sorgenkind, die Standardeingabe, aergert mich mal wieder aufs schlimmste.

    Grob gesagt moechte ich erstmal einen Kind-Prozess erstellen und in diesem eine Eingabe taetigen koennen. Natuerlich ist das bei weitem nicht alles, aber da ich nicht einmal das hinbekomme, wollte ich das erstmal klaeren.

    Mein Hauptprogramm sieht so aus: (main.c)
    Code:
    #include <stdio.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <string.h>
    
    int main(int argc, char* argv[]) {
    
    	char filename[50];
    	printf("filename: ");
    	fgets(filename, 50, stdin);
    	filename[strlen(filename)-1] = '\0';	//remove trailing \n
    	printf("filename: %s\nlength: %d\n", filename, strlen(filename));
    	
    	char* child2_argv[3];
    	child2_argv[0] = "child2\0";
    	child2_argv[1] = filename;
    	child2_argv[2] = NULL;
    	
    	pid_t child1, child2;
    	
    	// TODO: child1
    	
    	child2 = fork();
    	switch (child2) {
    		case -1:
    			perror("fork");
    			exit(1);
    			break;
    		case 0:
    			execv("child2", child2_argv);
    			perror("execv");
    			exit(1);
    			break;
    	}
    
    }
    
    Mein Kind so: (child2.c)

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define Fflush() while(getchar() != '\n')
    
    int main(int argc, char* argv[]) {
    
    	printf("Enter chars:\n");
    
    	char c = fgetc(stdin);
    	printf("%c\n", c);
    	printf("Finished\n");
    	
    	fclose(fp);
    	
    }
    
    Noch sehr sinnlos das Kind, ich weiss...

    Folgendes Problem: Wenn ich das Kind alleine in der Konsole starte, laesst es mich eine Eingabe machen und gibt diese auch korrekt aus. Starte ich allerdings das Hauptprogramm, wird die Eingabe uebersprungen. Immer. Egal, ob es cin, getchar, scanf, fgets, ... ist. Auch ein fflush(stdin) vorher brachte nichts.

    Woran koennte das liegen? :/

    Vielen Dank schonmal fuer Antworten.

    edit: Wers braucht btw noch: SunOS 5.8 mit gcc 3.4.2.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 SkydiverBS, 22.05.2007
    SkydiverBS

    SkydiverBS Tripel-As

    Dabei seit:
    15.01.2005
    Beiträge:
    207
    Zustimmungen:
    0
    Ort:
    Freising
    Hi!

    Nach etwas herumprobieren hab ich den Fehler gefunden:

    Der Vaterprozess beendet sich ohne auf seinen Sohn zu warten und der Sohn verliert damit den Zugriff auf stdin, da dies über den Vater läuft.

    Füge mal am Ende des Vater-Programms folgende Zeile ein:
    Code:
    wait(NULL);
    und erweitere die include Anweisungen um:
    Code:
    #include <sys/wait.h>
    Für weitere Infos siehe http://www.pronix.de/pronix-155.html.

    Gruß,
    Philip
     
  4. musiKk

    musiKk Dr. Strangelove

    Dabei seit:
    30.07.2006
    Beiträge:
    264
    Zustimmungen:
    0
    Ort:
    Leipzig
    Omg. Furchtbarer Fehler. Zu fruehes Testen kann also auch schaedlich sein, normalerweise habe ich immer auf die Kinder gewartet, nur dieses Mal war ich wohl zu hektisch.

    Vielen Dank. :)
     
Thema:

Geforkter Prozess laesst mich keine Eingabe taetigen

Die Seite wird geladen...

Geforkter Prozess laesst mich keine Eingabe taetigen - Ähnliche Themen

  1. GPL-Prozess gegen VMware hat begonnen

    GPL-Prozess gegen VMware hat begonnen: Der von Christoph Hellwig angestrengte Prozess gegen VMware wegen vermuteter GPL-Verletzung begann vor dem Landgericht Hamburg mit einer Anhörung....
  2. Wine überarbeitet Entwicklungsprozess

    Wine überarbeitet Entwicklungsprozess: Alexandre Julliard, langjähriger Maintainer des Wine-Projektes, hat Änderungen bei der Freigabe der künftigen Varianten des Windows-API-Nachbaus...
  3. Qualcomm publiziert Registerdokumentation für Adreno-Grafikprozessoren

    Qualcomm publiziert Registerdokumentation für Adreno-Grafikprozessoren: Als erster Hersteller von Chips für eingebettete Systeme hat Qualcomm überraschend eine Dokumentation für Teile seiner Adreno-Grafikprozessoren...
  4. Neue Intel-Grafikprozessoren nutzen proprietäre Firmware-Dateien

    Neue Intel-Grafikprozessoren nutzen proprietäre Firmware-Dateien: Ein neulich getätigter Beitrag zum Linux-Kernel zeigt, dass einige der neueren i915-Grafikprozessoren nun erstmals auf Firmware angewiesen sind,...
  5. Raspberry Pi 2 versechsfacht Prozessorleistung

    Raspberry Pi 2 versechsfacht Prozessorleistung: Die Raspberry Pi Foundation hat den Nachfolger des erfolgreichen Kleinrechners Raspberry Pi vorgestellt. Raspberry Pi 2 kommt mit einem Prozessor...