fork() und excelp benutzen zum programm starten


  • Mod

    canyakan95 schrieb:

    Hey habe genau das hingeschrieben als code..beim compilieren kamen keine fehler raus

    Verarschen kann ich mich auch selber.

    Hoffe kannst mir da weiter helfen

    Können? Sicher. Wollen? Bestimmt nicht, nachdem du hier mit derart dreiste Lügen auffährst.



  • #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<sys/types.h>
    
    int main()
    {
    
    	char choice; 
    	printf("--Menu--\n");
    	printf("geany\n");
    	printf("ps\n");
    	printf("xterm\n");
    	printf("top\n");
    
    	printf("Please select: ");
    	scanf("%c",&choice);
    	if(choice=='g')
    	{
    		printf("geany\n");
    		}
    		else if(choice=='p')
    		{
    			printf("ps\n");}
    			else if(choice=='x')
    			{
    				printf("xterm\n");}
    				else if(choice=='t')
    				{
    					printf("top\n");
    					}
    	pid_t child = fork();
    	if(child<0)
    	{
    		perror("fork()error");
    		exit(-1);
    		}
    		execlp("/home/studi/Desktop", "datei1",NULL);
    	return 0;
    	}
    

    edit nman: BBCode aktiviert.



  • Keine lüge kann iwie mein code nicht kopieren will iwe nicht klappen...
    Das was du da gerade siehst ist mein orginal code und lässt sich auch ohne fehler compieren
    Mfg


  • Mod

    Und? Fällt dir was auf, wenn du diesen Code mit deinen vorherigen Beiträgen vergleichst? Sie sind nicht identisch.

    Und schalt BB-Code nicht aus in deinen Beiträgen. So langsam solltest du mitbekommen haben, dass deine Beiträge unlesbar sind.

    So lange du dich weder vernünftig artikulieren, noch lesbare Beiträge posten, noch klare Fragen stellen kannst, habe ich jedenfalls keine Motivation, hier groß zu helfen. Sieht mir zu sehr nach einem schlechten Trollversuch aus, gerade die Zeile mit dem execlp. Ich habe schon viel zu viel Zeit in diesem Thread verschwendet.



  • Hey
    Sage mir doch dann bitte mal , wie ich die zeile mit execlp verbessern kann.
    Ich weiß selber, dass ich das mit dem ececlp nicht richtig verstanden habe.
    Mit freundlichen Grüßen



  • Gute Güte, der Code ist ja schauderhaft formatiert. Hier, einmal durch astyle gejagt:

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/types.h>
    
    int main()
    {
        char choice;
        printf("--Menu--\n");
        printf("geany\n");
        printf("ps\n");
        printf("xterm\n");
        printf("top\n");
    
        printf("Please select: ");
        scanf("%c",&choice);
        if(choice=='g')
        {
            printf("geany\n");
        }
        else if(choice=='p')
        {
            printf("ps\n");
        }
        else if(choice=='x')
        {
            printf("xterm\n");
        }
        else if(choice=='t')
        {
            printf("top\n");
        }
        pid_t child = fork();
        if(child<0)
        {
            perror("fork()error");
            exit(-1);
        }
        execlp("/home/studi/Desktop", "datei1", NULL);
        return 0;
    }
    

    Check doch mal mit perror, was beim execlp schiefgegangen ist, dann findest du den Fehler auch alleine.



  • canyakan95 schrieb:

    Nach einer Eingabe soll das ausgewählte Kommando ausgegeben werden und erneut die Möglichkeit zur Eingabe eines Kommandos bestehen.

    Das fehlt noch.

    Schau dir nochmal man fork an: es gibt -1 im Fehlerfall zurück, das hast du ja schon abgefangen.
    Wenn es erfolgreich ist, gibt es aber zwei(!) Rückgabewerte (da es dann zwei Prozesse sind!):
    0: Der neu erstellte Kindprozess bekommt 0 zurückgegeben.

    0: Der Elternprozess bekommt die Prozess-ID vom Kindprozess zurückgegeben.

    Schau dir dann auch nochmal man execlp an... so wie ich die Aufgabe verstanden habe, soll "geany" gestartet werden, wenn man 'g' in das Programm eingibt. Das erste Argument (das argv[0] vom zu startendem Programm) ist per Konvention der Programmname. Das letzte muss (char*)NULL sein.



  • Mach doch erstmal den ersten Teil richtig.

    Es sollte nur eine Stelle geben wo steht

    printf("Ihre Wahl: %s", programmname);
    

    Was passiert bei Fehleingaben?
    Wo ist die Wiederholung?
    Wo ist die CTRL-C Behandlung?

    Wenn das läuft, kannst du noch das fork und execlp nachrüsten.
    Dann ist es auch klar wo das hinkommt und welche Parameter du nehmen musst.



  • Hey
    wollte sagen das ich ein programmier anfänger und deswegen noch schwierigkeiten mit dem ganzen habe.
    Ich muss meine arbeit heute noch abgeben hoffe ihr könnt meine fehler jetzt verbessern und mir weiterhelfen.
    Habe gerade das ausprobiert wollte aber iwie nicht klappen.Die komilierung ist zwar erfolgreich, aber mein programm startet nicht.
    Mfg

    #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<sys/types.h>
    
    int main()
    {
    
    	char choice; 
    	printf("--Menu--\n");
    	printf("geany\n");
    	printf("ps\n");
    	printf("xterm\n");
    	printf("top\n");
    
    	printf("Please select: ");
    	scanf("%c",&choice);
    	if(choice=='g')
    	{
    		printf("geany\n");
    		}
    		else if(choice=='p')
    		{
    			printf("ps\n");}
    			else if(choice=='x')
    			{
    				printf("xterm\n");}
    				else if(choice=='t')
    				{
    					printf("top\n");
    					}
    	pid_t child = fork();
    	if(child<0)
    	{
    		perror("fork()error");
    		exit(-1);
    		}
    	if(child!=0)
    	{
    		printf("Im the parent %d, my child is %d\n", getpid(),child);
    		sleep(1);
    		}
    
    	else
    	{
    		printf("Im the child %d, my parent is %d\n", getpid(),getppid());
    		}
    		execl("/home/studi/Desktop","datei1.c",NULL);
    	return 0;
    	}
    


  • canyakan95 schrieb:

    Habe gerade das ausprobiert wollte aber iwie nicht klappen.Die komilierung ist zwar erfolgreich, aber mein programm startet nicht.

    Wenn ich den Code kopiere und übersetze startet das Programm durchaus...
    Programmieren sollte nicht aus "probieren" bestehen...
    Gewöhnt dir eine saubere Formatierung an, das erleichtet schon einiges.

    Du hast noch nicht einmal den ersten Aufgabenteil gelöst:

    canyakan95 schrieb:

    Nach einer Eingabe soll das ausgewählte Kommando ausgegeben werden und erneut die Möglichkeit zur Eingabe eines Kommandos bestehen.

    Zum zweiten Teil:

    Das execlp willst du im Kindprozess aufrufen.

    Für "ps" sollte es in etwa so aussehen: execlp("ps", "ps", (char *)NULL); bzw execlp(name, name, (char *)NULL); (wenn name "ps" enthält).



    1. Dein Programm erfüllt nicht einmal Teil 1 der Aufgabe.
    2. Der Aufruf von execlp ist falsch.
    3. selbst wenn der dann richtig ist, wirst du datei1.c nicht starten können, da es eine C-Datei ist.
    4. du sollst geany oder ps oder top oder xterm mit execlp starten.

    Erfülle den ersten Teil der Aufgabe:

    tue
        Ausgabe Menü
    
        Eingabe Buchstabe
    
        setze die Variable name entsprechend der Eingabe (hier keine Ausgabe)
    
        gib name aus, wenn Buchstabe gültig war (nur einmal an dieser Stelle)
        (hier kommt später das fork und exexlp hin)
    
      solange ( kein CTRL-C eingegeben wurde)
    

    Und wenn das läuft kannst du fork und execlp einbauen.
    Im Augenblick hast du für execlp nicht einmal den Namen für das Programm parat.


Anmelden zum Antworten