V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bigweb
V2EX  ›  程序员

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

  •  
  •   bigweb · 2012-08-25 23:14:40 +08:00 · 4861 次点击
    这是一个创建于 4468 天前的主题,其中的信息可能已经有所发展或是发生改变。
    虽然不是计算机专业,高中毕业,但是也从事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   ·   实用小工具   ·   3328 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:18 · PVG 20:18 · LAX 04:18 · JFK 07:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.