Befehlsbedeutung



  • Mit read() lese ich etwas aus einer Datei aus.

    Das selbe kann ich aber auch unter C mit fscanf().

    Was ist der Unterschied zwischen den OS-Befehlen und den C-Befehlen bzw. welchen Vorteil hat es OS-Befehle zu verwenden.



  • antilinuxianer schrieb:

    Was ist der Unterschied zwischen den OS-Befehlen und den C-Befehlen bzw. welchen Vorteil hat es OS-Befehle zu verwenden.

    Die C-Befehle sind bei jedem vollständigem Compilerpaket mit dabei, egal auf welcher Plattform.

    Das heißt aber natürlich auch, dass die Fähigkeiten dieser Befehle nur die Schnittmenge der Fähigkeiten von allen Plattformen sein können.
    (Deshalb hat C ja auch kein eingebautes DirectX oder so.)

    Die OS-Befehle haben daher meist mehr Optionen, um spezielle Fähigkeiten des Betriebssystems zu verwenden. Versuch mal, mit den Standard C Sachen Daten über das Netzwerk einzulesen. Für das "Linux"-read kein Ding.



  • Das sind keine Befehle, sondern Funktionen.

    antilinuxianer schrieb:

    Mit read() lese ich etwas aus einer Datei aus.

    Das selbe kann ich aber auch unter C mit fscanf().

    Was ist der Unterschied zwischen den OS-Befehlen und den C-Befehlen bzw. welchen Vorteil hat es OS-Befehle zu verwenden.

    man: fscanf(3) liest formatiert aus einem gebufferten Handle. [man]read(2)[/man ] tut das nicht.

    antilinuxianer schrieb:

    Kennt vielleicht jemand eine Seite oder Skriptum wo näher auf diese Befehle eingegangen wird.

    manpages und
    http://www.gnu.org/software/libc/manual/



  • fork() erzeugt eine Kopie vom Elternprozess=> Kindprozess.

    Beide haben letztendlich die selbe Funktion wozu brauche ich dann den Kindprozess wenn es nur eine Kopie vom Elternprozess ist.



  • Kannst ja was anderes machen.

    pid_t p = fork();
    if(p == -1) {
      perror("fork");
      exit(1);
    }
    else if(p == 0) {
      // Kind
    }
    else {
      // Eltern
    }
    


  • pid_t oder sowas ähnliches habe ich schon öfters gesehen. Was ist das für ein Dateityp.

    Wo ist jetzt der Unterschied ob ich es so schreibe. Kind- und Elternprozess ist ja dasselbe bzw. hat die selbe Funktion.

    pid_t p = fork();
    if(p == -1) {
      perror("fork");
      exit(1);
    }
    else if(p == 0) {
      // Eltern
    }
    else {
      // Eltern
    }
    

    edit nman: Code-Tags repariert.



  • antilinuxianer schrieb:

    pid_t oder sowas ähnliches habe ich schon öfters gesehen. Was ist das für ein Dateityp.

    Kein Dateityp, sondern einfach der Typ, den man für Prozess-IDs v erwendet. Siehe dazu auch hier: http://www.delorie.com/gnu/docs/glibc/libc_566.html

    Wo ist jetzt der Unterschied ob ich es so schreibe. Kind- und Elternprozess ist ja dasselbe bzw. hat die selbe Funktion.

    Der Unterschied wovon wozu? Rüdiger hat Dir schon ein Beispiel geliefert, ansonsten: http://www.ecst.csuchico.edu/~beej/guide/ipc/fork.html



  • @antilinuxianer
    Wenn du einen Kommentar änderst, hat das auf das Programm natürlich keine Auswirkungen. Kann es sein, dass du mit C oder Programmieren im allgemeinen wenig vertraut bist?



  • @rüdiger

    Ich habe gefragt wozu man den Kindprozess braucht wenn das nur eine Kopie vom Elternprozess ist.

    Du hast gemeint

    rüdiger schrieb:

    Kannst ja was anderes machen.

    pid_t p = fork();
    if(p == -1) {
      perror("fork");
      exit(1);
    }
    else if(p == 0) {
      // Kind=> hier steht Code vom Kindprozess
    }
    else {
      // Eltern=> hier steht Code vom Elternprozess
    }
    

    Was ist das andere. Ich sehe hier nur einen Unterschied zwischen //Eltern und //Kind.

    Aber wenn das der selbe Code ist. Ist es ja egal ob ich

    else if(p == 0)
    

    oder

    else
    

    ausführe.



  • Was ist das andere. Ich sehe hier nur einen Unterschied zwischen //Eltern und //Kind.

    Aber wenn das der selbe Code ist. Ist es ja egal ob ich ...

    Nein ist es nicht. 'Kind=> hier steht Code vom Kindprozess' wird nur vom Kindprozess ausgefuehrt. Das andere nur vom Elternprozess. Die zwei Prozesse fuehren also unterschiedlichen Code aus. Natuerlich solltest du die Kommentae durch echten (unterschiedlichen) Code ersetzen.



  • antilinuxianer schrieb:

    Aber wenn das der selbe Code ist. Ist es ja egal ob ich

    else if(p == 0)
    

    oder

    else
    

    ausführe.

    Wenn du den selben Code da reinpackst, dann ist es natürlich egal. Aber wenn du verschiedenen Code ausführen willst, dann packst du eben verschiedenen Code da rein (was man ja idR auch so macht). man: fork(2) gibt eben im Elternprozess etwas anderes zurück, als im Kindprozess.



  • [quote="knivil"]

    Die zwei Prozesse fuehren also unterschiedlichen Code aus. Natuerlich solltest du die Kommentae durch echten (unterschiedlichen) Code ersetzen.

    fork() erzeugt ja eine Kopie vom Elternprozess. => Wenn von einem Code eine Kopie erzeugt wird sind ja der Eltern- und Kindprozess gleich.

    Wenn beide Prozesse gleich sind wo ist der Unterschied ob ich den Kind oder Elternprozess ausführe.



  • bistn troll oder weisst du wirklich nicht warum man forkt ?
    falls letzteres: man benutzt es wenn man einen neuen prozess starten will. wird z.b. gerne in serverapps gemacht. wenn man keinen neuen prozess starten will lässt man einfach die finger von fork 😉


Anmelden zum Antworten