leer y comprender el código c


8

Quiero entender el código del kernel de Linux, y lo he estado revisando, pero no puedo tener una idea completa de lo que está sucediendo (me estoy concentrando en la parte de la red del kernel de Linux), así que cualquiera de ustedes puede sugerir algo bueno prácticas de lectura de código C (o cualquier otro idioma) en general y específico para la parte de red del kernel de Linux. Gracias por adelantado


12
El kernel de Linux está loco. Hace muchas cosas raras en aras del rendimiento. Por lo tanto, es mucho más difícil de leer que el nivel de aplicación c. ¡Nunca escribas código así!
Byron Whitlock

Respuestas:


10

Si necesita aprender C leyendo primero, entonces el núcleo de Linux no es donde comenzaría: es un programa bastante atípico de bajo nivel (aunque he encontrado que está bastante bien estructurado).

Más bien, mire el código fuente de algún programa de utilidad BSD, por ejemplo, aquellos en OpenBSD . Lea su página de manual para obtener una especificación semiformal de alto nivel del programa.

Tome una copia de la lectura de códigos de Spinellis y / o la práctica de programación de Kernighan y Pike .

Finalmente, lea un buen libro sobre componentes internos del núcleo de Unix o Linux y comience a leer el núcleo. (Descubrí que el diseño del sistema operativo Unix de Maurice J. Bach (ca. 1986) sigue siendo un buen comienzo, incluso para Linux.


gracias larsmans, el libro de lectura de códigos habla mucho de c, ¿puedes sugerir un libro similar en C ++

@hue: Nunca he encontrado un libro sobre C ++. Si alguien más conoce uno, estaría interesado.
Fred Foo

2

Lo que me sorprendió ver cuando intenté hacer lo mismo (que quieres hacer) es encontrar tan pocos comentarios relevantes (si los hay) en un código tan complejo.

La documentación debe ser el código, correcto, pero la función de comentarios existe en el lenguaje de programación C por alguna razón.

Si se han eliminado, probablemente también sea por una razón: para mantenerte alejado de él.

Dudo sinceramente que todos los desarrolladores de kernel tengan que trabajar en esta base de código limpiada y mi opinión es que (al menos) el autor de cualquier "característica" del kernel (como epoll, por el bien de la discusión) mantiene Una versión privada del código CON todos esos comentarios faltantes.

¿Por qué creo esto?

Un destacado desarrollador de kernel, tratando de convencerme de que publique el código fuente del servidor G-WAN como código abierto, me aconsejó "hacer que sea lo más difícil de leer".

Agregó que esta táctica funcionó maravillosamente para él durante décadas en todos sus proyectos de "código abierto".

Controlar cualquier parte crítica de un proyecto de "código abierto" ampliamente utilizado obviamente crea oportunidades cuando sus ingresos provienen exclusivamente de la consultoría.

Entonces, volviendo a su pregunta, lo más útil que puede hacer para comprender este código es estudiarlo paso a paso y AGREGAR los comentarios que faltan.

Luego, progresivamente, comenzará a tener sentido (y descubrirá por qué se han eliminado los comentarios).


44
-1 por acusaciones anónimas.

Si bien estoy de acuerdo en que los comentarios son importantes, ciertamente se podría argumentar que el núcleo de Linux fue escrito por expertos y solo pretende ser leído / modificado por otros expertos. Muchos de los comentarios que usted y yo encontraríamos útiles probablemente se considerarían "ruido" para el público objetivo, al igual que nunca escribiríamos:i++ // increment i by 1
Cody Gray

@Larsman, me presento en mi cuenta, así que esto NO es una acusación anónima.

@Cody, el día en que escribirá el código tan rápido como G-WAN (desearía que pudiera), comprenderá que aunque comente mucho mi código, probablemente no necesite "i ++" para comentarlo.

3
-1. Desearía poder restar más.

0

Lo que a veces me ayuda es depurar el código. La visualización de los datos reales y las rutas reales tienden a hacerme más comprensible. Como lo señalaron otros miembros, el código del kernel de Linux es un mal punto de partida para comprender c.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.