Wo finde ich Funktionsimplementierungen aus den Header-Dateien



  • Hi,

    ich wollte mir mal den Source-Code für eine Funktion aus der <unistd.h> Datei anschauen. Leider musste ich fesstellen, dass dort die Funktion nur als extern definiert ist.

    extern int pipe (int __pipedes[2]) __THROW __wur;
    

    Wo finde ich die implementierung zu der Definition ?

    mit freundlichen Grüßen,

    Mike



  • Kommt drauf an welche Standard C Lib auf dem System ist. Bei einem üblichen Linux System auf dem PC wirds vermutlich die glibc sein. Den Source gibts hier: https://www.gnu.org/software/libc/download.html

    Ich weiß allerdings nicht was du dir davon versprichst. Der Code ist aufgrund Alter, enthaltenen Workarounds und Optimierung eher gruselig zu lesen.



  • Pipe ist ein system call, folglich kommt es auf dein System an. Die jeweilige libc stellt wrapper für die entsprechenden system calls bereit. (Implementierungen z.B. unter OpenBSD: src/sys/kern ; Linux /fs/)



  • Danke für eure antworten.

    Ich wollte mir den source-code anschauen, weil ich gedacht habe, dass ich danach schlauer bin, was die Umsetzung der Funktion pipe(int fd) betrifft. Leider hat mir das auch nichts gebracht.

    Wenn ich eine pipe erzeuge, erhalte ich 2 filedeskriptoren. (Einer zum lesen und einer zum schreiben in meine Pipe).

    Aber wie wird das jetzt umgesetzt ? Prinzipiell verfügt meine Pipe ja über einen Buffer(größe abhänging vom Betriebssystem).

    Aber wo liegt jetzt dieser Bufferspeicher, wenn ich nach Aufruf von pipe einen fork-Aufurf durchführe ? Ich erzeuge dadurch ja eine Kopie der Daten des Elternprozesses (Befehlszähller Filedeskriptoren usw. Copy on write vernachlässigt).

    Wieso habe ich dann aber nach meinem Fork()-Aufruf nicht 2 Speicherbereiche für meinen Pipebuffer, oder wird dieser außerhalb des Prozesses gelegt ?

    PS an Moderator: Bitte in das richtige Unterforum verschieben. Danke.

    mit freundlichen Grüßen,

    MikeeF



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (alle ISO-Standards) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Was wird denn an das Kind konkret übergeben? (Hast du ja eh schon geschrieben, du erzeugst eine pipe und erhältst… )



  • MikeeF schrieb:

    oder wird dieser außerhalb des Prozesses gelegt ?

    Ja, Pipes liegen im Speicher des Kernels.


Anmelden zum Antworten