学习 Linux 内核前,有必要过一遍《unix 环境高级编程》(APUE)吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
amiwrong123
V2EX    程序员

学习 Linux 内核前,有必要过一遍《unix 环境高级编程》(APUE)吗?

  •  
  •   amiwrong123 2024-04-02 11:34:00 +08:00 2669 次点击
    这是一个创建于 560 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为有这么一种说法“如果都不知道 linux 提供了什么功能,又怎么可能看懂它的源代码”。

    我觉得是有一定道理的。我现在个人想深入理解 linux 内核,不过这是一个比较长的计划。所以现在有这些问题:
    - 学习 linux 内核前,过一遍 APUE 是有必要的吗?
    - APUE 的哪些内容,是我应该作为的重点内容?
    12 条回复    2024-04-02 14:54:31 +08:00
    idontnowhat2say
        1
    idontnowhat2say  
       2024-04-02 12:09:00 +08:00   1
    我觉得很有必要,过了之后学习 linux 内核感觉更轻松点。
    Noicdi
        2
    Noicdi  
       2024-04-02 12:11:52 +08:00 via iPhone
    不回答问题,题外话:
    我觉得过 apue 这种书太累了,所以一般都是碰到什么接口或者问题会去书里定向查;但是书里也有一些很有价值的东西(不是接口说明这种内容),不把书过一遍也不知道能挖到什么宝。
    所以一直处于过书和不过的叠加态。

    再推荐一本《 Linux/unix 系统编程手册》,从系统编程到网络编程,很全面我认为。
    agagega
        3
    agagega  
       2024-04-02 12:23:23 +08:00 via iPhone
    更好的选择可能是过一遍 Rust 的 rustix 库,了解类 Unix 系统提供的 API 可以怎么用怎么封装,以及不同系统之间的差别
    ben666
        4
    ben666  
       2024-04-02 12:45:23 +08:00
    不需要,但是要有一些基本的操作系统概念,找一个感兴趣的主题看。
    刚开始可以看一些讲 linux kernel 的书
    Understanding the Linux Kernel
    understanding linux network internals

    有一些比较独立的内核模块如四层负载均衡 LVS ,资料比较多,入手比较容易,也比较做实验、方便调试。
    在做实验的时候可以用 dperf 打流 https://dperf.org/
    KMpAn8Obw1QhPoEP
        5
    KMpAn8Obw1QhPoEP  
       2024-04-02 12:51:08 +08:00 via Android
    op 是做系统开发的吗?深入理解 Linux 内核的目的是什么呢?
    aeon113
        6
    aeon113  
       2024-04-02 13:15:19 +08:00 via iPhone
    我觉得不需要,apue 的东西太多了,而且 kernel 里很多代码,比如中断,比如 swap ,也不是直接向用户态提供服务的

    相反我觉得先看一遍"现代操作系统"对你理解 kernel 会有很大帮助

    https://csc-knu.github.io/sys-prog/books/Andrew%20S.%20Tanenbaum%20-%20Modern%20Operating%20Systems.pdf
    julyclyde
        7
    julyclyde  
       2024-04-02 13:56:52 +08:00
    你确定你需要看内核?
    mioktiar56
        8
    mioktiar56  
       2024-04-02 14:02:15 +08:00
    等你看完了这些书,你就发现看这些书是浪费时间
    R4rvZ6agNVWr56V0
        9
    R4rvZ6agNVWr56V0  
       2024-04-02 14:32:32 +08:00
    我觉得如果从来没了解过 unix 、linux 的 C 编程,可以读 apue ,这样能更好的理解 ABI 用户态的编程,打通思路。
    虽然打通思路后也未必能上手 kernel 的代码分析。。。。
    wjx0912
        10
    wjx0912  
       2024-04-02 14:37:05 +08:00
    个人觉得没必要,这是一本字典,需要的时候查一查。从头到尾看其实效率很低的
    NessajCN
        11
    NessajCN  
       2024-04-02 14:46:42 +08:00
    Linux 提供的是跟硬件交互的功能
    更具体一点它是把硬件抽象成文件,把交互抽象成写入/读取文件
    然后开发者就可以专注于软件对硬件的操控设计,而不用太考虑具体实现方式
    https://makelinux.github.io/kernel/map/
    基本看懂这张图也就够了
    tool2d
        12
    tool2d  
       2024-04-02 14:54:31 +08:00
    那个编程艺术作者都说了,书里 90%的问题,正常人一辈子都遇不到。

    看书不如和 GPT 互怼几句,只有先遇到问题,才能被理解和消化为知识积累。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     987 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:37 PVG 06:37 LAX 15:37 JFK 18:37
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86