đọc và hiểu mã c


8

Tôi muốn hiểu mã hạt nhân linux và tôi đã trải qua nó nhưng tôi không thể có được cảm giác đầy đủ về những gì đang xảy ra (tôi đang tập trung vào phần mạng của kernel linux), vì vậy bất kỳ ai trong số các bạn có thể đề xuất tốt thực hành đọc mã C (hoặc bất kỳ lang nào khác) nói chung và cụ thể đối với phần mạng của hạt nhân linux. Cảm ơn trước


12
Nhân Linux là điên rồ. Nó làm rất nhiều điều kỳ lạ vì lợi ích của hiệu suất. Do đó khó đọc hơn nhiều so với cấp ứng dụng c. Đừng bao giờ viết mã như thế!
Byron Whitlock

Câu trả lời:


10

Nếu bạn cần học C bằng cách đọc trước, thì nhân Linux không phải là nơi bạn bắt đầu: đó là một chương trình cấp thấp, không điển hình (mặc dù tôi đã thấy nó có cấu trúc khá tốt).

Thay vào đó, hãy xem mã nguồn của một số chương trình tiện ích BSD, ví dụ như các mã trong OpenBSD . Đọc trang chủ của nó để biết thông số kỹ thuật cấp cao, bán chính thức của chương trình.

Lấy một bản sao Đọc mã của Spinellis và / hoặc Thực hành lập trình của Kernighan và Pike .

Cuối cùng, đọc một cuốn sách hay về các nhân bên trong Unix hoặc Linux và bắt đầu đọc kernel. (Tôi đã tìm thấy Thiết kế hệ điều hành Unix của Maurice J. Bach (khoảng năm 1986) vẫn là một khởi đầu tốt, ngay cả đối với Linux.)


cảm ơn larsmans, cuốn sách đọc mã nói rất nhiều về c, bạn có thể đề xuất cuốn sách tương tự trên C ++

@hue: Tôi chưa bao giờ tìm thấy một cuốn sách như vậy về C ++. Nếu ai đó biết một người, tôi sẽ quan tâm.
Fred Foo

2

Điều tôi đã ngạc nhiên khi thấy tôi cố gắng làm điều tương tự (mà bạn muốn làm) là tìm thấy rất ít ý kiến liên quan (nếu có) trong một mã phức tạp như vậy.

Tài liệu phải là mã, đúng, nhưng tính năng bình luận tồn tại trong ngôn ngữ lập trình C vì một lý do.

Nếu chúng đã bị xóa, đó có lẽ cũng là một lý do: để bạn tránh xa nó.

Tôi thực sự nghi ngờ rằng tất cả các nhà phát triển kernel phải làm việc trên cơ sở mã đã được dọn sạch này và quan điểm của tôi về điều đó (ít nhất) là tác giả của bất kỳ "tính năng" kernel nào (như epoll, vì lợi ích của cuộc thảo luận) một phiên bản riêng của mã VỚI tất cả những bình luận còn thiếu.

Tại sao tôi tin điều này?

Một nhà phát triển hạt nhân nổi bật, cố gắng thuyết phục tôi phát hành mã nguồn của máy chủ G-WAN dưới dạng nguồn mở, khuyên tôi "làm cho nó khó đọc nhất có thể".

Ông nói thêm rằng chiến thuật này đã làm việc tuyệt vời cho ông trong nhiều thập kỷ cho tất cả các dự án "nguồn mở" của ông.

Giữ sự hiểu biết của bạn về bất kỳ phần quan trọng nào của dự án "nguồn mở" được sử dụng rộng rãi rõ ràng tạo ra cơ hội khi doanh thu của bạn chỉ đến từ tư vấn.

Vì vậy, trở lại câu hỏi của bạn, điều hữu ích nhất mà bạn có thể làm để hiểu mã này là nghiên cứu từng bước và THÊM các bình luận còn thiếu.

Sau đó, dần dần, nó sẽ bắt đầu có ý nghĩa (và bạn sẽ tìm thấy lý do tại sao các bình luận đã bị xóa).


4
-1 cho các cáo buộc nặc danh.

Mặc dù tôi đồng ý rằng các bình luận rất quan trọng, nhưng người ta chắc chắn có thể lập luận rằng nhân Linux được viết bởi các chuyên gia và chỉ có ý định được đọc / sửa đổi bởi các chuyên gia khác. Nhiều ý kiến ​​mà bạn và tôi thấy hữu ích có lẽ sẽ được coi là "tiếng ồn" đối với đối tượng mục tiêu, giống như chúng tôi sẽ không bao giờ viết:i++ // increment i by 1
Cody Gray

@Larsman, tôi trình bày bản thân trong tài khoản của mình vì vậy đây KHÔNG phải là lời buộc tội nặc danh.

@Cody, ngày bạn sẽ viết mã nhanh như G-WAN (tôi ước bạn có thể), bạn sẽ hiểu rằng trong khi tôi nhận xét rất nhiều về mã của mình, tôi có thể không cần "i ++" để nhận xét.

3
-1. Tôi ước tôi có thể trừ nhiều hơn.

0

Điều đôi khi giúp tôi là gỡ lỗi thông qua mã. Việc trực quan hóa dữ liệu thực tế và các đường dẫn thực tế có xu hướng làm cho nó dễ hiểu hơn đối với tôi. Như được chỉ ra bởi các thành viên khác, mã hạt nhân linux là một điểm khởi đầu rất tệ để hiểu c.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.