Cコードの読み取りと理解


8

Linuxカーネルのコードを理解したいのですが、それを試してみましたが、何が起こっているのかを完全に把握できません(Linuxカーネルのネットワーク部分に集中しています)。一般的に、およびLinuxカーネルのネットワーク部分に固有のC(またはその他のlang)コードを読み取る方法。前もって感謝します


12
Linuxカーネルはクレイジーです。それはパフォーマンスのために多くの奇妙なことをします。したがって、アプリケーションレベルcよりもはるかに読みにくいです。そのようなコードを書かないでください!
Byron Whitlock

回答:


10

最初に読んでCを学ぶ必要がある場合、Linuxカーネルはあなたが始めるところではありません。それはかなり非典型的な低レベルのプログラムです(私はそれが非常によく構造化されていることがわかりましたが)。

むしろ、いくつかのBSDユーティリティプログラム、たとえばOpenBSDのソースコードを見てください。プログラムのセミフォーマルで高レベルな仕様については、そのマンページをお読みください。

Spinellisのコード読み取りやカーニハンとパイクのプログラミング実践のコピーを入手してください

最後に、UnixまたはLinuxカーネルの内部に関する優れた本を読んで、カーネルを読み始めてください。(モーリスJ.バッハのUnixオペレーティングシステム設計(1986年頃)は、たとえLinuxであっても、まだ良い出発点であることがわかりました。)


larsmans氏に感謝します。コードを読んでいる本はcについて多くを語っています。C++で同様の本を提案できますか

@hue:私はC ++に関するそのような本を見つけたことはありません。他の誰かがそれを知っているなら、私は興味があります。
Fred Foo、2011年

2

私が同じことをしたいとき(あなたがしたいこと)を見て驚いたのは、そのような複雑なコードで関連するコメント(もしあれば)をほとんど見つけられないことです。

ドキュメントは正しいコードである必要がありますが、コメント機能は理由によりCプログラミング言語に存在します。

それらが削除された場合、それはおそらく理由にもあります。それを避けるためです。

私は、すべてのカーネル開発者がこのクリーンアップされたコードベースに取り組む必要があることを心から疑っています。私の考えでは、(少なくとも)任意のカーネル「機能」(議論のためにepollのような)の作者がコメントのすべてが欠落しているコードのプライベートバージョン。

なぜ私はこれを信じるのですか?

有名なカーネル開発者の1人が、G-WANサーバーのソースコードをオープンソースとしてリリースするように説得しようとして、「できるだけ読みにくくする」ようにアドバイスしました。

彼は、この戦術が彼のすべての「オープンソース」プロジェクトで何十年にもわたって素晴らしい働きをしたと付け加えました。

広く使用されている「オープンソース」プロジェクトの重要な部分をしっかりと把握することは、収益がコンサルティングのみに由来する場合に明らかにチャンスを生み出します。

したがって、あなたの質問に戻って、このコードを理解するためにできる最も有用なことは、コードを段階的に調査し、不足しているコメントを追加することです。

その後、徐々に、それは意味をなすようになります(そして、コメントが削除された理由がわかります)。


4
-1匿名の告発。

コメントが重要であることに私は同意しますが、Linuxカーネルは専門家によって作成され、他の専門家による読み取り/変更のみを意図したものであると間違いなく主張することができます。あなたと私が参考に見つけるだろうとコメントの多くは、おそらく私たちが書くことはないくらいのような、ターゲットオーディエンスに「ノイズ」とみなされるであろう:i++ // increment i by 1
コーディグレー

@ラースマン、私は自分のアカウントに自分自身を提示しているので、これは匿名の非難ではありません。

@ Cody、G-WANと同じくらい速くコードを書く日(できればいいのですが)、私のコードに強くコメントしている間、コメントするのにおそらく「i ++」は必要ないことを理解します。

3
-1。もっと引けたらいいのに。

0

ときどき役立つのは、コードをデバッグすることです。実際のデータと実際のパスを視覚化すると、わかりやすくなります。他のメンバーによって指摘されたように、Linuxカーネルコードはcを理解するための非常に悪い出発点です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.