Ich möchte den Linux-Kernel-Code verstehen, und ich habe ihn durchlaufen, aber ich kann nicht das volle Gefühl dafür bekommen, was passiert (ich konzentriere mich auf den Netzwerkteil des Linux-Kernels), also kann jeder von Ihnen etwas Gutes vorschlagen Praktiken zum Lesen von C-Code (oder einem anderen Lang-Code) im Allgemeinen und spezifisch für den Netzwerkteil des Linux-Kernels. Danke im Voraus
c
linux-kernel
Davidhaskins
quelle
quelle
Antworten:
Wenn Sie C lernen müssen, indem Sie zuerst lesen, dann ist der Linux-Kernel nicht der Ort, an dem Sie anfangen würden: Es ist ein eher untypisches Programm auf niedriger Ebene (obwohl ich festgestellt habe, dass es ziemlich gut strukturiert ist).
Schauen Sie sich lieber den Quellcode für ein BSD-Hilfsprogramm an, z . B. die in OpenBSD . In der Manpage finden Sie eine semi-formale Spezifikation des Programms auf hoher Ebene.
Besorgen Sie sich eine Kopie von Spinellis ' Code Reading und / oder Kernighan und Pikes Programmierpraxis .
Lesen Sie abschließend ein gutes Buch über Unix- oder Linux-Kernel-Interna und lesen Sie den Kernel. (Ich habe festgestellt, dass Maurice J. Bachs Design des Unix-Betriebssystems (ca. 1986) auch für Linux immer noch ein guter Anfang ist.)
quelle
Was mich erstaunt hat, als ich versucht habe, dasselbe zu tun (was Sie tun möchten), ist, so wenige relevante Kommentare (falls vorhanden) in einem so komplexen Code zu finden.
Die Dokumentation sollte der Code sein, richtig, aber die Kommentarfunktion ist aus einem bestimmten Grund in der Programmiersprache C vorhanden.
Wenn sie entfernt wurden, hat das wahrscheinlich auch einen Grund: Sie davon fernzuhalten.
Ich bezweifle aufrichtig, dass alle Kernel-Entwickler an dieser bereinigten Codebasis arbeiten müssen, und ich bin der Ansicht, dass (zumindest) der Autor eines bestimmten Kernel-Features (wie Epoll, um der Diskussion willen) dies behält eine private Version des Codes mit all den fehlenden Kommentaren.
Warum glaube ich das?
Ein bekannter Kernel-Entwickler, der versuchte, mich davon zu überzeugen, den Quellcode des G-WAN-Servers als Open Source freizugeben, riet mir, "das Lesen so schwierig wie möglich zu gestalten".
Er fügte hinzu, dass diese Taktik während Jahrzehnten bei all seinen "Open-Source" -Projekten wunderbar für ihn funktioniert habe.
Wenn Sie einen kritischen Teil eines weit verbreiteten "Open-Source" -Projekts im Griff behalten, ergeben sich offensichtlich Chancen, wenn Ihre Einnahmen ausschließlich aus der Beratung stammen.
Zurück zu Ihrer Frage: Das Nützlichste, was Sie tun können, um diesen Code zu verstehen, ist, ihn Schritt für Schritt zu studieren und die fehlenden Kommentare hinzuzufügen.
Dann wird es nach und nach sinnvoll (und Sie werden feststellen, warum die Kommentare entfernt wurden).
quelle
i++ // increment i by 1
Was mir manchmal hilft, ist das Debuggen durch den Code. Die Visualisierung der tatsächlichen Daten und der tatsächlichen Pfade macht sie für mich verständlicher. Wie von anderen Mitgliedern hervorgehoben, ist der Linux-Kernel-Code ein sehr schlechter Ausgangspunkt für das Verständnis von c.
quelle