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

2012-08-25 23:14:40 +08:00
 bigweb
虽然不是计算机专业,高中毕业,但是也从事php的开发有几年了,用python开发过一些采集器,后来转用scrapy。会一些javascript。数据库mysql,mongodb,redis都了解并都用到了实际环境中。开发过的网站pv曾经跑到过近2千万

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

请问那些书比较合适?另外我常使用的系统是mac os和ubuntu,希望能在这两个系统下可以进行良好的开发测试
4863 次点击
所在节点    程序员
15 条回复
bigweb
2012-08-25 23:16:11 +08:00
呀。文章竟然不能修改,发现一些别字。。。抱歉!
bigweb
2012-08-25 23:17:50 +08:00
刚看到EDIT的按钮。。。。不明显阿,汗
Blask
2012-08-25 23:44:47 +08:00
我建议: 先学下C, 然后学下操作系统, 再学UNIX环境下C高级编程.
书籍也有很多,C的话就不说了,操作系统的话,主要是了解下底层的东西, 我们是学校的教材-[操作系统设计原理与精髓], 然后看下[UNIX环境下C高级编程], 或者灵活搭配, 我只是提供个建议.
harmy
2012-08-26 00:10:21 +08:00
bigweb
2012-08-26 12:32:32 +08:00
谢楼上两位,问个问题阿,铜币不是2000多么,为何侧边栏只显示65?
@harmy
@Blask
Js
2012-08-26 12:35:03 +08:00
APUE.....
chisj
2012-08-26 13:32:58 +08:00
《unix环境高级编程》强烈推荐。
skywinger
2012-08-26 15:12:48 +08:00
另外再配合看《UNIX网络编程》
Cofyc
2012-08-26 16:38:17 +08:00
可先学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
2012-08-26 16:58:56 +08:00
语言不是问题,主要是你用来解决什么领域问题?
C语言可以使用的场合非常广,所以你要确定你学习来做什么用。
其实你已经划分了在Linux环境下,这很好,比什么都不知道,只知道学习C语言要好多了。
然后是在Linux下面,如何使用,你既然已经能够应用大部分的开源应用,那就在你能够掌握的开源应用中去寻找你的答案。
这些开源应用的推出是为了解决什么问题,在C语言中是如何实现的,又是如何跟系统结合的,在运行中有哪些好的地方,又有哪些限制,而这些限制解决了没有,如果解决了,是如何解决的。
lowstz
2012-08-26 17:02:04 +08:00
lukydd
2012-08-26 19:06:48 +08:00
C入门之后强烈推荐《深入理解计算机系统》,超经典入门教材,讲得非常深入浅出,可以帮助你建立起对整个系统的感觉。
shanks
2012-08-26 20:27:05 +08:00
神书APUE与CSAPP
必看
lusin
2012-08-26 20:42:42 +08:00
能搞2千万PV的东西啊,神级的

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

非常感谢您这么长篇的回复,很详细,对我非常有帮助,谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/46031

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX