非计算机专业,想学习linux下的c编程,请问怎么开始? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
bigweb
V2EX    程序员

非计算机专业,想学习linux下的c编程,请问怎么开始?

  •  
  •   bigweb 2012-08-25 23:14:40 +08:00 5241 次点击
    这是一个创建于 4800 天前的主题,其中的信息可能已经有所发展或是发生改变。
    虽然不是计算机专业,高中毕业,但是也从事php的开发有几年了,用python开发过一些采集器,后来转用scrapy。会一些Javascript。数据库mysql,mongodb,redis都了解并都用到了实际环境中。开发过的网站pv曾经跑到过近2千万

    现在感觉到了职业的瓶颈,虽然大多数应用能在开源项目中找到所想要的,但还是希望能自己开发一些底层的应用,比如epoll的应用等等,因为掌控欲望比较强烈,希望自己的应用中每一行代码都能为自己所控制。

    请问那些书比较合适?另外我常使用的系统是mac os和ubuntu,希望能在这两个系统下可以进行良好的开发测试
    15 条回复    1970-01-01 08:00:00 +08:00
    bigweb
        1
    bigweb  
    OP
       2012-08-25 23:16:11 +08:00
    呀。文章竟然不能修改,发现一些别字。。。抱歉!
    bigweb
        2
    bigweb  
    OP
       2012-08-25 23:17:50 +08:00
    刚看到EDIT的按钮。。。。不明显阿,汗
    Blask
        3
    Blask  
       2012-08-25 23:44:47 +08:00   1
    我建议: 先学下C, 然后学下操作系统, 再学UNIX环境下C高级编程.
    书籍也有很多,C的话就不说了,操作系统的话,主要是了解下底层的东西, 我们是学校的教材-[操作系统设计原理与精髓], 然后看下[UNIX环境下C高级编程], 或者灵活搭配, 我只是提供个建议.
    harmy
        4
    harmy  
       2012-08-26 00:10:21 +08:00
    bigweb
        5
    bigweb  
    OP
       2012-08-26 12:32:32 +08:00
    谢楼上两位,问个问题阿,铜币不是2000多么,为何侧边栏只显示65?
    @harmy
    @Blask
    Js
        6
    Js  
       2012-08-26 12:35:03 +08:00
    APUE.....
    chisj
        7
    chisj  
       2012-08-26 13:32:58 +08:00
    《unix环境高级编程》强烈推荐。
    skywinger
        8
    skywinger  
       2012-08-26 15:12:48 +08:00
    另外再配合看《UNIX网络编程》
    Cofyc
        9
    Cofyc  
       2012-08-26 16:38:17 +08:00   7
    可先学c 语言本身开始,经典的 c 书籍很多。推荐一本 c prime plus 5th edition

    ubuntu/macosx 下都有命令行工具,使用 gcc/clang 编译器,很方便。可以从简单的 c 代码写起。

    hello world, 简单的算法,比如排序,链表等。可以找一本算法书,尝试实现里面简单的算法。

    这些之后,c 的基础知识就能掌握,c 的数据类型,控制语句,宏,以及指针的运用等。

    c 的标准库,这时也会了解一部分,但只需要过一遍即可。要注意 c 的标准,c89/c99 等,编译器现在默认都是 c89, 建议你开始学 c99 即可。编译器加 -std=c99 参数。相对来说 c99 代码写起来稍微简单一些(如果是从动态语言转过去的话),比如可以在 for 里面可以申明变量,有 bool 类型支持等。等需要阅读参与开源项目时,再去了解 c89 的细节。因为 c89 更跨平台,许多项目是 纯 c89 实现的(比如 lua)。

    这之后,就可以学习 unix 环境编程(参考 @chisj 推荐的《unix 环境高级编程》),了解 unix/linux 下的进程模型,这是 c 进阶的关键,这是就会了解到程序是被内核启动的,内存是如何分布以及被申请和释放,以及堆栈模型等等。

    最后,可能你要开始某个领域的编程了,比如网络编程。这时候也需要去了解硬件模型了,同时不同领域有许多不同的系统库,以及该领域的第三方库等等。epoll 是 linux 2.5 之后的网络事件库,但 macosx 下是另外一种 kqueue/kevent。

    UNIX c 开发中除了理论知识,还有许多技巧、经验以及对其中文化的领悟(推荐 《UNIX 编程艺术》),需要经年积累与实践,才会有些成就做出来。

    C 开发,是我最纯粹、最愉悦的编程体验。希望你也感受到。

    以上是我的 C 开发经验之谈。
    thinkinnight
        10
    thinkinnight  
       2012-08-26 16:58:56 +08:00   1
    语言不是问题,主要是你用来解决什么领域问题?
    C语言可以使用的场合非常广,所以你要确定你学习来做什么用。
    其实你已经划分了在Linux环境下,这很好,比什么都不知道,只知道学习C语言要好多了。
    然后是在Linux下面,如何使用,你既然已经能够应用大部分的开源应用,那就在你能够掌握的开源应用中去寻找你的答案。
    这些开源应用的推出是为了解决什么问题,在C语言中是如何实现的,又是如何跟系统结合的,在运行中有哪些好的地方,又有哪些限制,而这些限制解决了没有,如果解决了,是如何解决的。
    lowstz
        11
    lowstz  
       2012-08-26 17:02:04 +08:00   1
    lukydd
        12
    lukydd  
       2012-08-26 19:06:48 +08:00
    C入门之后强烈推荐《深入理解计算机系统》,超经典入门教材,讲得非常深入浅出,可以帮助你建立起对整个系统的感觉。
    shanks
        13
    shanks  
       2012-08-26 20:27:05 +08:00
    神书APUE与CSAPP
    必看
    lusin
        14
    lusin  
       2012-08-26 20:42:42 +08:00
    能搞2千万PV的东西啊,神级的

    靠这个够用了:)
    bigweb
        15
    bigweb  
    OP
       2012-08-26 21:00:36 +08:00
    @Cofyc 对于跨平台我关注的并不多,很长时间以来我更多的想法是怎么取解决当下的问题。或许这不是一个好习惯。

    非常感谢您这么长篇的回复,很详细,对我非常有帮助,谢谢!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2638 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 12:48 PVG 20:48 LAX 05:48 JFK 08:48
    Do have faith in what you're doing.
    ubao msn 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