sandra 于 2010-12-02 15:23:00发表:
虽然起来很难,慢慢来吧,我是初学者
jmch 于 2010-12-01 10:55:10发表:
回复下载
jmch 于 2010-12-01 10:55:06发表:
jmch 于 2010-12-01 10:55:01发表:
jmch 于 2010-12-01 10:54:55发表:
jmch 于 2010-12-01 10:54:41发表:
jmch 于 2010-12-01 10:53:25发表:
还不让下 现金不足
hellojkhjuh 于 2010-11-30 21:14:27发表:
想下载!!钱不够……悲剧
hellojkhjuh 于 2010-11-30 21:13:48发表:
shuixingoo 于 2010-11-23 22:13:56发表:
太好了!看来咱这样的穷人还是没被社会抛弃! 邮箱:liuchun.1985@163.com 谢谢!大赞!
xq450548221 于 2010-11-23 11:38:32发表:
谢谢诶 就是太贵了
聪明的笨熊 于 2010-11-22 15:09:09发表:
留着印,等钱够了过来载~~
qianjin_hj 于 2010-10-26 18:47:25发表:
是非得失
tjmzgn 于 2010-10-26 14:21:27发表:
我也想看看
gaoqingsiner 于 2010-10-25 14:38:42发表:
好多,得多少钱啊!
81461288 于 2010-10-23 21:15:07发表:
下来看看再说。
81461288 于 2010-10-23 21:15:06发表:
81461288 于 2010-10-23 21:15:05发表:
81461288 于 2010-10-23 21:15:04发表:
81461288 于 2010-10-23 21:15:03发表:
tsing418 于 2010-10-23 14:57:44发表:
THX FOR SHARING!
pengdekai5 于 2010-09-22 06:32:11发表:
对基础提不起兴趣诶。。。
pengdekai5 于 2010-09-22 06:31:37发表:
恐怖。。。要这么多钱。。。
pengdekai5 于 2010-09-22 06:31:29发表:
mikeli 于 2010-09-21 10:35:15发表:
可以留下邮箱,我装发给你们。 论坛上传附件只能是小于2MB的,我也没有办法啊
momolovejie 于 2010-09-20 17:53:06发表:
想下,但是没有钱,无奈
momolovejie 于 2010-09-20 16:47:20发表:
jovde 于 2010-09-20 08:29:25发表:
好多
ldlywlx 于 2010-09-20 08:12:02发表:
下载了,不过扣除了我50元。
相思爱文 于 2010-09-20 04:51:36发表:
[i=s] 本帖最后由 相思爱文 于 2010-9-20 05:03 编辑 [/i]以下为附件文件内容引用部分 Linux C编程一站式学习 下一页 Linux C编程一站式学习打包下载 docbook源码下载 宋劲杉 北京亚嵌教育研究中心 版权 © 2008, 2009 宋劲杉, 北京亚嵌教育研究中心 Permission is granted to copy, distribute and/or modify this document under the terms of the GNUFree Documentation License, Version 1.3 or any later version published by the Free SoftwareFoundation; with the Invariant Sections being 前言, with no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in 附录 B, GNU Free Documentation LicenseVersion 1.3, 3 November 2008. 2009.7.31 修订历史 修订 0.6 2009.2.27 添加了GFDL许可证,正式网络发布。第三部分还很粗糙,错误也有不少,有待改进。第一部分和第二部分已经比较成熟,第二部分还差三章没写。 修订 0.7 2009.4.24 全书的章节基本完成,但有些章节还很不完善。 目录 历史 前言 I. C语言入门1. 程序的基本概念 1 1. 程序和编程语言2. 自然语言和形式语言3. 程序的调试4. 第一个程序2. 常量、变量和表达式1. 继续Hello World2. 常量3. 变量4. 赋值5. 表达式6. 字符类型与字符编码3. 简单函数1. 数学函数2. 自定义函数3. 形参和实参4. 全局变量、局部变量和作用域4. 分支语句1. if语句2. if/else语句3. 布尔代数4. switch语句5. 深入理解函数1. return语句2. 增量式开发3. 递归6. 循环语句1. while语句2. do/while语句3. for语句4. break和continue语句5. 嵌套循环6. goto语句和标号7. 结构体1. 复合类型与结构体2. 数据抽象3. 数据类型标志4. 嵌套结构体8. 数组 2 1. 数组的基本概念2. 数组应用实例:统计随机数3. 数组应用实例:直方图4. 字符串5. 多维数组9. 编码风格1. 缩进和空白2. 注释3. 标识符命名4. 函数5. indent工具10. gdb1. 单步执行和跟踪函数调用2. 断点3. 观察点4. 段错误11. 排序与查找1. 算法的概念2. 插入排序3. 算法的时间复杂度分析4. 归并排序5. 线性查找6. 折半查找12. 栈与队列1. 数据结构的概念2. 堆栈3. 深度优先搜索4. 队列与广度优先搜索5. 环形队列13. 本阶段总结II. C语言本质14. 计算机中数的表示1. 为什么计算机用二进制计数2. 不同进制之间的换算3. 整数的加减运算3.1. Sign and Magnitude表示法3.2. 1's Complement表示法 3 3.3. 2's Complement表示法3.4. 有符号数和无符号数4. 浮点数15. 数据类型详解1. 整型2. 浮点型3. 类型转换3.1. Integer Promotion3.2. Usual Arithmetic Conversion3.3. 由赋值产生的类型转换3.4. 强制类型转换3.5. 编译器如何处理类型转换16. 运算符详解1. 位运算1.1. 按位与、或、异或、取反运算1.2. 移位运算1.3. 掩码1.4. 异或运算的一些特性2. 其它运算符2.1. 复合赋值运算符2.2. 条件运算符2.3. 逗号运算符2.4. sizeof运算符与typedef类型声明3. Side Effect与Sequence Point4. 运算符总结17. 计算机体系结构基础1. 内存与地址2. CPU3. 设备4. MMU5. Memory Hierarchy18. x86汇编程序基础1. 最简单的汇编程序2. x86的寄存器3. 第二个汇编程序4. 寻址方式5. ELF文件 4 5.1. 目标文件5.2. 可执行文件19. 汇编与C之间的关系1. 函数调用2. main函数和启动例程3. 变量的存储布局4. 结构体和联合体5. C内联汇编6. volatile限定符20. 链接详解1. 多目标文件的链接2. 定义和声明2.1. extern和 static关键字2.2. 头文件2.3. 定义和声明的详细规则3. 静态库4. 共享库4.1. 编译、链接、运行4.2. 动态链接的过程4.3. 共享库的命名惯例5. 虚拟内存管理21. 预处理1. 预处理的步骤2. 宏定义2.1. 函数式宏定义2.2. 内联函数2.3. #、 ##运算符和可变参数2.4. 宏展开的步骤3. 条件预处理指示4. 其它预处理特性22. Makefile基础1. 基本规则2. 隐含规则和模式规则3. 变量4. 自动处理头文件的依赖关系5. 常用的 make命令行选项 5 23. 指针1. 指针的基本概念2. 指针类型的参数和返回值3. 指针与数组4. 指针与 const限定符5. 指针与结构体6. 指向指针的指针与指针数组7. 指向数组的指针与多维数组8. 函数类型和函数指针类型9. 不完全类型和复杂声明24. 函数接口1. 本章的预备知识1.1. strcpy与 strncpy1.2. malloc与 free2. 传入参数与传出参数3. 两层指针的参数4. 返回值是指针的情况5. 回调函数6. 可变参数25. C标准库1. 字符串操作函数1.1. 初始化字符串1.2. 取字符串的长度1.3. 拷贝字符串1.4. 连接字符串1.5. 比较字符串1.6. 搜索字符串1.7. 分割字符串2. 标准I/O库函数2.1. 文件的基本概念2.2. fopen/fclose2.3. stdin/stdout/stderr2.4. errno与perror函数2.5. 以字节为单位的I/O函数2.6. 操作读写位置的函数2.7. 以字符串为单位的I/O函数2.8. 以记录为单位的I/O函数2.9. 格式化I/O函数2.10. C标准库的I/O缓冲区2.11. 本节综合练习 6 3. 数值字符串转换函数4. 分配内存的函数26. 链表、二叉树和哈希表1. 链表1.1. 单链表1.2. 双向链表1.3. 静态链表1.4. 本节综合练习2. 二叉树2.1. 二叉树的基本概念2.2. 排序二叉树3. 哈希表27. 本阶段总结III. Linux系统编程28. 文件与I/O1. 汇编程序的Hello world2. C标准I/O库函数与Unbuffered I/O函数3. open/close4. read/write5. lseek6. fcntl7. ioctl8. mmap29. 文件系统1. 引言2. ext2文件系统2.1. 总体存储布局2.2. 实例剖析2.3. 数据块寻址2.4. 文件和目录操作的系统函数3. VFS3.1. 内核数据结构3.2. dup和dup2函数30. 进程1. 引言 7 2. 环境变量3. 进程控制3.1. fork函数3.2. exec函数3.3. wait和waitpid函数4. 进程间通信4.1. 管道4.2. 其它IPC机制5. 练习:实现简单的Shell31. Shell脚本1. Shell的历史2. Shell如何执行命令2.1. 执行交互式命令2.2. 执行脚本3. Shell的基本语法3.1. 变量3.2. 文件名代换(Globbing):* ? []3.3. 命令代换:`或 $()3.4. 算术代换:$(())3.5. 转义字符\3.6. 单引号3.7. 双引号4. bash启动脚本4.1. 作为交互登录Shell启动,或者使用--login参数启动4.2. 以交互非登录Shell启动4.3. 非交互启动4.4. 以sh命令启动5. Shell脚本语法5.1. 条件测试:test [5.2. if/then/elif/else/fi5.3. case/esac5.4. for/do/done5.5. while/do/done5.6. 位置参数和特殊变量5.7. 函数6. Shell脚本的调试方法 8 32. 正则表达式1. 引言2. 基本语法3. sed4. awk5. 练习:在C语言中使用正则表达式33. 信号1. 信号的基本概念2. 产生信号2.1. 通过终端按键产生信号2.2. 调用系统函数向进程发信号2.3. 由软件条件产生信号3. 阻塞信号3.1. 信号在内核中的表示3.2. 信号集操作函数3.3. sigprocmask3.4. sigpending4. 捕捉信号4.1. 内核如何实现信号的捕捉4.2. sigaction4.3. pause4.4. 可重入函数4.5. sig_atomic_t类型与volatile限定符4.6. 竞态条件与sigsuspend函数4.7. 关于SIGCHLD信号34. 终端、作业控制与守护进程1. 终端1.1. 终端的基本概念1.2. 终端登录过程1.3. 网络登录过程2. 作业控制2.1. Session与进程组2.2. 与作业控制有关的信号3. 守护进程35. 线程1. 线程的概念 9 2. 线程控制2.1. 创建线程2.2. 终止线程3. 线程间同步3.1. mutex3.2. Condition Variable3.3. Semaphore3.4. 其它线程间同步机制4. 编程练习36. TCP/IP协议基础1. TCP/IP协议栈与数据包封装2. 以太网(RFC 894)帧格式3. ARP数据报格式4. IP数据报格式5. IP地址与路由6. UDP段格式7. TCP协议7.1. 段格式7.2. 通讯时序7.3. 流量控制37. socket编程1. 预备知识1.1. 网络字节序1.2. socket地址的数据类型及相关函数2. 基于TCP协议的网络程序2.1. 最简单的TCP网络程序2.2. 错误处理与读写控制2.3. 把client改为交互式输入2.4. 使用fork并发处理多个client的请求2.5. setsockopt2.6. 使用select3. 基于UDP协议的网络程序4. UNIX Domain Socket IPC5. 练习:实现简单的Web服务器5.1. 基本HTTP协议5.2. 执行CGI程序A. 10 字符编码1. ASCII码2. Unicode和UTF-83. 在Linux C编程中使用Unicode和UTF-8B. GNU Free Documentation License Version 1.3, 3 November 2008参考书目索引 下一页 历史全国嵌入式人才培训基地 11 全国嵌入式人才培训基地 历史上一页 下一页 历史 请点评 本书改编和包含了以下两本书的部分章节,这两本书均以GNU Free Documentation License发布。 How To Think Like A Computer Scientist: Learning with C++ 作者Allen B. Downey。原书由Green Tea Press发行,可以从http://www.greenteapress.com/下载到。 Programming from the Ground Up: An Introduction to Programming using Linux AssemblyLanguage 作者Jonathan Bartlett。原书由Bartlett Publishing发行,可以从http://savannah.nongnu.org/projects/pgubook/下载到。上一页 下一页 Linux C 编程一站式学习 起始页 前言全国嵌入式人才培训基地 12 全国嵌入式人才培训基地 附录 B. GNU Free Documentation License Version 1.3, 3 November 2008上一页 下一页 附录 B. GNU Free Documentation License Version 1.3, 3 November 2008 请点评 Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/>Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.0. PREAMBLEThe purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.1. APPLICABILITY AND DEFINITIONSThis License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.The "publisher" means any person or entity that distributes copies of the Document to the public.A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.2. VERBATIM COPYINGYou may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.You may also lend copies, under the same conditions stated above, and you may publicly display copies.3. COPYING IN QUANTITYIf you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.4. MODIFICATIONSYou may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: * A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. * B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. * C. State on the Title page the name of the publisher of the Modified Version, as the publisher. * D. Preserve all the copyright notices of the Document. * E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. * F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. * G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. * H. Include an unaltered copy of this License. * I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. * J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. * K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. * L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. * M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. * N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. * O. Preserve any Warranty Disclaimers.If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.5. COMBINING DOCUMENTSYou may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".6. COLLECTIONS OF DOCUMENTSYou may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.7. AGGREGATION WITH INDEPENDENT WORKSA compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.8. TRANSLATIONTranslation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.9. TERMINATIONYou may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.10. FUTURE REVISIONS OF THIS LICENSEThe Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.11. RELICENSING"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site."CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization."Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.ADDENDUM: How to use this License for your documentsTo use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with … Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.上一页 下一页 3. 在 Linux C 编程中使用 Unicode 和 UTF-8 起始页 参考书目全国嵌入式人才培训基地 13 全国嵌入式人才培训基地 前言上一页 下一页 前言 请点评 这本书有什么特点?面向什么样的读者? 请点评 这本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一。该课程是为期四个月的全日制职业培训,要求学员毕业时具备非常Solid的C编程能力,能熟练地使用Linux系统,同时对计算机体系结构与指令集、操作系统原理和设备驱动程序都有较深入的了解。然而学员入学时的水平是非常初级而且参差不齐的:学历有专科、本科也有研究生,专业有和计算机相关的也有很不相关的(例如会计专业),以前从事的职业有和技术相关的也有完全不相关的(例如HR),年龄从二十出头到三十五六岁的都有。这么多背景完全不同、基础完全不同、思维习惯和理解能力完全不同的人来听同一堂课,大家都迫切希望学会嵌入式开发技术,投身IT行业,这就是职业教育的特点,也是我编这本书时需要考虑的主要问题。 学习编程绝不是一件简单的事,尤其是对于零基础的初学者来说。大学的计算机专业有四年时间从零基础开始培养一个人,微积分、线代、随机、离散、组合、自动机、编译原理、操作系统、计算机组成原理等等一堆基础课,再加上C/C++、Java、数据库、网络、软件工程、计算机图形学等等一堆专业课,最后培养出一个能找到工作的学生。很遗憾这最后一条很多学校没有做好,来亚嵌培训的很多学生就是四年这么学过来的,但据我们考查他们的基础几乎为零,我不知道为什么。与之形成鲜明对比的是,只给我们四个月的时间,同样要求从零基础开始,最后培养出一个能找到工作的学生,而且还要保证他找到工作,这就是职业教育的特点。 为什么我说“只给我们四个月的时间”?我们倒是想教四年呢,但学时的长短我们做不了主,是由市场规律决定的。四年的任务要求四个月做好,要怎么完成这样一个几乎不可能的任务?有些职业教育给出的答案是“实用主义”,打出了“有用就学,没有用就不学”的口号,大肆贬低说大学里教的基础课都是过时的、无用的,只有他们教的技术才是实用的,这种炒作很不好,我认为大学里教的每一门课都是非常有用的,基础知识在任何时候都不会过时,倒是那些时髦的“实用技术”有可能很快就过时了。 四年的任务怎么才能用四个月做好?我们给出的答案是“优化”。现在大学里安排的课程体系最大的缺点就是根本不考虑优化。每个过来人都会有这样的感觉:大一大二学了好多数学课,却不知道都是干什么用的,为什么要学。连它有什么用都不知道怎么能有兴趣学好呢?然后到大三大四学专业课时,用到以前的知识了,才发现以前学的数学是多么有用,然而早就忘得一干二净了,考完试都还给老师了,回头重新学吧,这时候才发现很多东西以前根本没学明白,现在才真的学明白了,那么前两年的时间岂不是都浪费了?大学里的课程体系还有一个缺点就是不灵活,每门课必须占一个学期,必须由一个老师教,不同课程的老师之间没有任何沟通和衔接,其实这些课程之间是相互依赖的,把它们强行拆开是不符合人的认知规律的。比如我刚上大学的时候,大一上半学期就被逼着学C语言,其实C语言是一门很难的编程语言,不懂编译原理、操作系统和计算机体系结构根本不可能学明白,那半个学期自然就浪费掉了。当时几乎所有学校的计算机相关专业都是这样,大一上来就学C语言,有的学校更疯狂,上来就学C++,导致大多数学生都以为自己会C语言,但其实都是半吊子水平,到真正写代码的时候经常为一个Bug搞得焦头烂额,却没有机会再系统地学一遍C语言,因为在学校看来,C语言课早在大一就给你“上完了”,就像一顿饭已经吃完了,不管你吃饱没吃饱,不会再让你重吃一遍了。显而易见,如果要认真地对这些课程做优化,的确是有很多水份可以挤的。 本书有以下特点:不是孤立地讲C语言,而是和编译原理、操作系统、计算机体系结构结合起来讲。或者说,本书的内容只是以C语言为载体,真正讲的是计算机的原理和程序的原理。强调基本概念和基本原理,在编排顺序上非常重视概念之间的依赖关系,每次引入一个新的概念,只依赖于前面章节已经讲过的概念,而绝不会依赖后面章节要讲的概念。有些地方为了叙述得完整,也会引用后面要讲的内容,比如说“有关XX我们到XX章再仔细讲解”,凡是这种引用都不是必要的依赖,可以当它不存在,只管继续往下看就行了。尽量做到每个知识点直到要用的时候才引入。过早引入一个知识点,讲完了又不用它,读者很快就会遗忘,这是不符合认知规律的。 14 这是一本从零基础开始学习编程的书,不要求读者有任何编程经验,但读者至少需要具备以下素质:熟悉Linux系统的基本操作。如果不具备这一点,请先参考其它教材学习Linux系统的基本操作,熟练之后再学习本书,《鸟哥的Linux私房菜》据说是Linux系统管理和应用方面比较好的一本书。但学习本书并不需要会很多系统管理技术,只要会用基本命令,会自己安装系统和软件包就足够了。具有高中毕业的数学水平。本书会用到高中的数学知识,事实上,如果不具有高中毕业的数学水平,也不必考虑做程序员了。但并不是说只要具有高中毕业的数学水平就足够做程序员了,只能说看这本书应该没有问题,数学是程序员最重要的修养,计算机科学其实就是数学的一个分支,如果你的数学功底很差,日后还需恶补一下。具有高中毕业的英文水平。理由同上。对计算机的原理和本质深感兴趣,不是为就业而学习,不是为拿高薪而学习,而是真的感兴趣,想把一切来龙去脉搞得清清楚楚而学习。勤于思考。本书尽最大努力理清概念之间的依赖关系,力求一站式学习,读者不需要为了找一个概念的定义去翻其它书,也不需要为了搞清楚一个概念在本书中前后一通乱翻,只需从前到后按顺序学习即可。但一站式学习并不等于傻瓜式学习,有些章节有一定的难度,需要积极思考才能领会。本书可以替你节省时间,但不能替你思考,不要指望像看小说一样走马观花看一遍就能学会。 又是一本C语言书。好吧,为什么我要学这本书而不是谭浩强或者K&R? 请点评 谭浩强的书我就不说什么了。居然教学生include一个.c文件。 K&R是公认的世界上最经典的C语言教程,这点毫无疑问。在C标准出台之前,K&R第一版就是事实上的C标准。C89标准出台之后,K&R跟着标准推出了第二版,可惜此后就没有更新过了,所以不能反映C89之后C语言的发展以及最新的C99标准,本书在这方面做了很多补充。上面我说过了,这本书与其说是讲C语言,不如说是以C语言为载体讲计算机和操作系统的原理,而K&R就是为了讲C语言而讲C语言,侧重点不同,内容编排也很不相同。K&R写得非常好,代码和语言都非常简洁,但很可惜,只有会C语言的人才懂得欣赏它,K&R是非常不适合入门学习的,尤其不适合零基础的学生入门学习。 这本书“ 是什么”和“ 不是什么” 请点评 本书包括三大部分:C语言入门。介绍基本的C语法,帮助没有任何编程经验的读者理解什么是程序,怎么写程序,培养程序员的思维习惯,找到编程的感觉。前半部分改编自[ ThinkCpp]。C语言本质。结合计算机和操作系统的原理讲解C程序是怎么编译、链接、运行的,同时全面介绍C的语法。位运算的章节改编自亚嵌教育林小竹老师的讲义,链表和二叉树的章节改编自亚嵌教育朱老师的讲义。汇编语言的章节改编自[ GroudUp],在该书的最后一章提到,学习编程有两种Approach,一种是Bottom Up,一种是TopDown,各有优缺点,需要两者结合起来。所以我编这本书的思路是,第一部分Top Down,第二部分BottomUp,第三部分可以算填了中间的空隙,三部分全都围绕C语言展开。Linux系统编程。介绍各种Linux系统函数和内核的工作原理。Socket编程的章节改编自亚嵌教育卫剑钒老师的讲义。 这本书定位在入门级,虽然内容很多,但不是一本百科全书,除了C语言基本要讲透之外其它内容都不深入,书中列出了很多参考资料,是读者进一步学习的起点。K&R的第一章是一个Whirlwind Tour,把全书的内容简单过了一遍,然后再逐个深入进去讲解。本书也可以看作是计算机专业课程体系的一个Whirlwind Tour,学习完本书之后有了一个全局观,再去学习那些参考资料就应该很容易上手了。 为什么要在Linux平台上学C语言?用Windows学C语言不好吗? 请点评 用Windows还真的是学不好C语言。C语言是一种面向底层的编程语言,要写好C程序,必须对操作系统的工作原理非常清楚,因为操作系统也是用C写的,我们用C写应用程序直接使用操作系统提供的接口。既然你选择了看这本书,你一定了解:Linux是一种开源的操作系统,你有任何疑问都可以从源代码和文档中找到答案,即使你看不懂源代码,也 15 找不到文档,也很容易找个高手教你,各种邮件列表、新闻组和论坛上从来都不缺乐于助人的高手;而Windows是一种封闭的操作系统,除了微软的员工别人都看不到它的源代码,只能通过文档去猜测它的工作原理,更糟糕的是,微软向来喜欢藏着揶着,好用的功能留着自己用,而不会写到文档里公开。本书的第一部分在Linux或Windows平台上学习都可以,但第二部分和第三部分介绍了很多Linux操作系统的原理以帮助读者更深入地理解C语言,只能在Linux平台上学习。 Windows平台上的开发工具往往和各种集成开发环境(IDE,Integrated Development Environment)绑在一起,例如Visual Studio、Eclipse等。使用IDE确实很便捷,但IDE对于初学者绝对不是好东西。微软喜欢宣扬傻瓜式编程的理念,告诉你用鼠标拖几个控件,然后点一个按钮就可以编译出程序来,但是真正有用的程序有哪个是这么拖出来的?很多从Windows平台入门学编程的人,编了好几年程序,还是只知道编完程序点一个按钮就可以跑了,把几个源文件拖到一个项目里就可以编译到一起了,如果有更复杂的需求他们就傻眼了,因为他们脑子里只有按钮、菜单的概念,根本没有编译器、链接器、Makefile的概念,甚至连命令行都没用过,然而这些都是初学编程就应该建立起来的基本概念。另一方面,编译器、链接器和C语言的语法有密切的关系,不了解编译器、链接器的工作原理,也不可能真正掌握C的语法。所以,IDE并没有帮助你学习,而是阻碍了你学习,本来要学好C编程只要把语法和编译命令学会就行了,现在有了IDE,除了学会语法和编译命令,你还得弄清楚编译命令和IDE是怎么集成的,这才算学明白了,本来就很复杂的学习任务被IDE搞得更加复杂了。Linux用户的使用习惯从来都是以敲命令为主,以鼠标操作为辅,从学编程的第一天起就要敲命令编译程序,等到你把这些基本概念都搞清楚了,你觉得哪个IDE好用你再去用,不过到那时候你可能会更喜欢vi或emacs而不是IDE了。 致谢 请点评 本书的写作得到北京亚嵌教育研究中心的全力支持,尤其感谢李明老师和何家胜老师,没有公司的支持,我不可能有时间有条件写这本书,也不可能有机会将这本书公开在网上。 然后要感谢亚嵌教育的历届学员和各位老师,在教学和讨论过程中我经常会得到有益的启发,这些都促使这本书更加完善。在本书的写作过程中,很多读者为本书提出很有价值的建议,很多建议是热心网友通过在线评论提的,有些网友我只知道id或email。都列在下面,排名不分先后。 感谢北京亚嵌教育研究中心的老师们:李明,何家胜,邸海霞,郎铁山,朱仲涛,廖文江,韩超,吴岳,邢文鹏,何晓龙,林小竹,卫剑钒。 感谢热心网友:ddd(ddd@clf.net),wuyulei(wuyulei0210@163.com),comma(commapopo@hotmail.com),田伟(sioungiep@zzxy.org),田雨(tianyu_1123@hotmail.com ),daidai(daidai0628@sina.com),邓楠(monnand@gmail.com),杜朴风(cplusplus@zzxy.org),Zoom.Quiet(zoom.quiet@gmail.com),陈老师(cljcore@gmail.com),杨景(yangbajing@gmail.com),章钰(buptzhangyu@163.com),chen(cry2133@gmail.com),JiaweiZhang(rhythm.zhang@gmail.com),waterloo(waterloo2005@gmail.com),张现超(zxqianrong@gmail.com,http://zxqianrong.is-programmer.com/),曾宇(uyucn@163.com),董俊波(dongjunbo@gmail.com),RobinXiang(dancelinux@gmail.com),刘艳明(lonny_liu@hotmail.com),付(been2100@163.com),cleverd(crossie@qq.com),orange(juicerococo@hotmail.com),徐斌(simlink_xub@163.com),cyy(cyy198767@hotmail.com),Linux_Xfce(coodycody23@gmail.com),冯海云(906702745@qq.com),侯延祥(houyx2008@163.com),churchmice(firefoxelectric@gmail.com),linux----00xx00xxooxx(codycody23@gmail.com),syfeagle(syfeagle@hotmail.com),王公仆(wanggongpu@gmail.com),刘敏(liuminchinese@163.com),Laciq(dd@qq.com),yuchen(yuchen12@gmail.com),陆杨(doctorhslyyang@gmail.com),陈杨希(fusang12@126.com),love_wc3(love_wc3@163.com),姚磊(yaolei135@gmail.com),芝麻(shouer@foxmail.com),宇(wadenx@126.com),沈震(asillybird@zzxy.org),bing(sunbingfly@gmail.com),mick(huimin47@gmail.com),baaluck(baaluck@gmail.com),曹帅军(caoshuaijun@gmail.com),zhoudy(dongyong800@163.com),朱夜光(zhuyeguang@163.com),刺猬(littlehedgehog@qq.com),san(leezhenfeng@msn.com),王兆宏(zhao_hong_wang@sina.com),徐凯(romanxk@163.com)。 在写作过程中我遇到过很多困难,工作繁忙,对未来迷茫,生活压力大,缺乏安全感,个人琐事等等。然而有这么多热心的同学、老师、朋友、网友在等着看我的书更新,给我提建议希望我把书改得更完善,这是我坚持写下去的最大的动力。谢谢你们! 16 最后几句话 请点评 和大多数作者一样,最后我要说的是我水平十分有限,没写过C编译器和C标准库,我不能保证书中的内容全部正确,如有错误欢迎批评指正。遗憾的是很多作者把这句话当成了挡箭牌,当成了自己不必竭尽全力保证内容正确性的借口。写书是一件严肃的事,书中的错误所有人都看得见,白纸黑字赖不掉的。我教过的很多学生都在大学里学过C语言,甚至考过二级,但程序写得一塌糊涂,连最基本的概念都搞错了,以前学过的C语言教材中的错误在他们脑子里根深蒂固,即使我纠正多次,他们仍然只记得以前学过的错误概念,这种有基础的学生还不如没有任何基础的学生教起来容易。我非常害怕我教给别人的仍然是错的,所以我仔细研究了C99之后才敢动笔写书。这本书涵盖的话题比较广泛,我竭尽全力也不足以保证书中的内容全部正确,还要依靠社区的力量一起来完善这本书,这样才能真正对读者负责,所以我选择将这本书开源。 希望本书成为你求学道路上的第一个伙伴。 宋劲杉 北京 2008年11月27日
qiaocsk2 于 2010-09-19 23:31:27发表:
顶,支持!
雨然 于 2010-09-19 21:07:30发表:
雨然 于 2010-09-19 21:07:11发表:
想下载!!
mikeli 于 2010-09-19 16:44:00发表:
Linux c编程一站式学习 PDF
mikeli 于 2010-09-19 16:43:47发表:
mikeli 于 2010-09-19 16:43:27发表:
mikeli 于 2010-09-19 16:43:06发表:
sandra 于 2010-12-02 15:23:00发表:
虽然起来很难,慢慢来吧,我是初学者
jmch 于 2010-12-01 10:55:10发表:
回复下载
jmch 于 2010-12-01 10:55:06发表:
回复下载
jmch 于 2010-12-01 10:55:01发表:
回复下载
jmch 于 2010-12-01 10:54:55发表:
回复下载
jmch 于 2010-12-01 10:54:41发表:
回复下载
jmch 于 2010-12-01 10:53:25发表:
还不让下 现金不足
hellojkhjuh 于 2010-11-30 21:14:27发表:
想下载!!钱不够……悲剧
hellojkhjuh 于 2010-11-30 21:13:48发表:
想下载!!钱不够……悲剧
shuixingoo 于 2010-11-23 22:13:56发表:
太好了!看来咱这样的穷人还是没被社会抛弃!
邮箱:liuchun.1985@163.com
谢谢!大赞!
xq450548221 于 2010-11-23 11:38:32发表:
谢谢诶
就是太贵了
聪明的笨熊 于 2010-11-22 15:09:09发表:
留着印,等钱够了过来载~~
qianjin_hj 于 2010-10-26 18:47:25发表:
是非得失
tjmzgn 于 2010-10-26 14:21:27发表:
我也想看看
gaoqingsiner 于 2010-10-25 14:38:42发表:
好多,得多少钱啊!
81461288 于 2010-10-23 21:15:07发表:
下来看看再说。
81461288 于 2010-10-23 21:15:06发表:
下来看看再说。
81461288 于 2010-10-23 21:15:05发表:
下来看看再说。
81461288 于 2010-10-23 21:15:04发表:
下来看看再说。
81461288 于 2010-10-23 21:15:03发表:
下来看看再说。
tsing418 于 2010-10-23 14:57:44发表:
THX FOR SHARING!
pengdekai5 于 2010-09-22 06:32:11发表:
对基础提不起兴趣诶。。。
pengdekai5 于 2010-09-22 06:31:37发表:
恐怖。。。要这么多钱。。。
pengdekai5 于 2010-09-22 06:31:29发表:
恐怖。。。要这么多钱。。。
mikeli 于 2010-09-21 10:35:15发表:
可以留下邮箱,我装发给你们。
论坛上传附件只能是小于2MB的,我也没有办法啊
momolovejie 于 2010-09-20 17:53:06发表:
想下,但是没有钱,无奈
momolovejie 于 2010-09-20 16:47:20发表:
想下,但是没有钱,无奈
jovde 于 2010-09-20 08:29:25发表:
好多
ldlywlx 于 2010-09-20 08:12:02发表:
下载了,不过扣除了我50元。
相思爱文 于 2010-09-20 04:51:36发表:
[i=s] 本帖最后由 相思爱文 于 2010-9-20 05:03 编辑 [/i]
以下为附件文件内容引用部分
Linux C编程一站式学习
下一页
Linux C编程一站式学习打包下载 docbook源码下载
宋劲杉
北京亚嵌教育研究中心
版权 © 2008, 2009 宋劲杉, 北京亚嵌教育研究中心
Permission is granted to copy, distribute and/or modify this document under the terms of the GNUFree Documentation License, Version 1.3 or any later version published by the Free SoftwareFoundation; with the Invariant Sections being 前言, with no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in 附录 B,
GNU Free Documentation LicenseVersion 1.3, 3 November 2008.
2009.7.31
修订历史
修订
0.6
2009.2.27
添加了GFDL许可证,正式网络发布。第三部分还很粗糙,错误也有不少,有待改进。第一部分和第二部分已经比较成熟,第二部分还差三章没写。
修订
0.7
2009.4.24
全书的章节基本完成,但有些章节还很不完善。
目录
历史
前言
I. C语言入门1. 程序的基本概念
1
1. 程序和编程语言2. 自然语言和形式语言3. 程序的调试4. 第一个程序2. 常量、变量和表达式1. 继续Hello World2. 常量3. 变量4. 赋值5. 表达式6. 字符类型与字符编码3. 简单函数1. 数学函数2. 自定义函数3. 形参和实参4. 全局变量、局部变量和作用域4. 分支语句1. if语句2. if/else语句3. 布尔代数4. switch语句5. 深入理解函数1. return语句2. 增量式开发3. 递归6. 循环语句1. while语句2. do/while语句3. for语句4. break和continue语句5. 嵌套循环6. goto语句和标号7. 结构体1. 复合类型与结构体2. 数据抽象3. 数据类型标志4. 嵌套结构体8. 数组
2
1. 数组的基本概念2. 数组应用实例:统计随机数3. 数组应用实例:直方图4. 字符串5. 多维数组9. 编码风格1. 缩进和空白2. 注释3. 标识符命名4. 函数5. indent工具10. gdb1. 单步执行和跟踪函数调用2. 断点3. 观察点4. 段错误11. 排序与查找1. 算法的概念2. 插入排序3. 算法的时间复杂度分析4. 归并排序5. 线性查找6. 折半查找12. 栈与队列1. 数据结构的概念2. 堆栈3. 深度优先搜索4. 队列与广度优先搜索5. 环形队列13. 本阶段总结II. C语言本质14. 计算机中数的表示1. 为什么计算机用二进制计数2. 不同进制之间的换算3. 整数的加减运算3.1. Sign and Magnitude表示法3.2. 1's Complement表示法
3
3.3. 2's Complement表示法3.4. 有符号数和无符号数4. 浮点数15. 数据类型详解1. 整型2. 浮点型3. 类型转换3.1. Integer Promotion3.2. Usual Arithmetic Conversion3.3. 由赋值产生的类型转换3.4. 强制类型转换3.5. 编译器如何处理类型转换16. 运算符详解1. 位运算1.1. 按位与、或、异或、取反运算1.2. 移位运算1.3. 掩码1.4. 异或运算的一些特性2. 其它运算符2.1. 复合赋值运算符2.2. 条件运算符2.3. 逗号运算符2.4. sizeof运算符与typedef类型声明3. Side Effect与Sequence Point4. 运算符总结17. 计算机体系结构基础1. 内存与地址2. CPU3. 设备4. MMU5. Memory Hierarchy18. x86汇编程序基础1. 最简单的汇编程序2. x86的寄存器3. 第二个汇编程序4. 寻址方式5. ELF文件
4
5.1. 目标文件5.2. 可执行文件19. 汇编与C之间的关系1. 函数调用2.
main函数和启动例程3. 变量的存储布局4. 结构体和联合体5. C内联汇编6. volatile限定符20. 链接详解1. 多目标文件的链接2. 定义和声明2.1.
extern和
static关键字2.2. 头文件2.3. 定义和声明的详细规则3. 静态库4. 共享库4.1. 编译、链接、运行4.2. 动态链接的过程4.3. 共享库的命名惯例5. 虚拟内存管理21. 预处理1. 预处理的步骤2. 宏定义2.1. 函数式宏定义2.2. 内联函数2.3.
#、
##运算符和可变参数2.4. 宏展开的步骤3. 条件预处理指示4. 其它预处理特性22. Makefile基础1. 基本规则2. 隐含规则和模式规则3. 变量4. 自动处理头文件的依赖关系5. 常用的
make命令行选项
5
23. 指针1. 指针的基本概念2. 指针类型的参数和返回值3. 指针与数组4. 指针与
const限定符5. 指针与结构体6. 指向指针的指针与指针数组7. 指向数组的指针与多维数组8. 函数类型和函数指针类型9. 不完全类型和复杂声明24. 函数接口1. 本章的预备知识1.1.
strcpy与
strncpy1.2.
malloc与
free2. 传入参数与传出参数3. 两层指针的参数4. 返回值是指针的情况5. 回调函数6. 可变参数25. C标准库1. 字符串操作函数1.1. 初始化字符串1.2. 取字符串的长度1.3. 拷贝字符串1.4. 连接字符串1.5. 比较字符串1.6. 搜索字符串1.7. 分割字符串2. 标准I/O库函数2.1. 文件的基本概念2.2. fopen/fclose2.3. stdin/stdout/stderr2.4. errno与perror函数2.5. 以字节为单位的I/O函数2.6. 操作读写位置的函数2.7. 以字符串为单位的I/O函数2.8. 以记录为单位的I/O函数2.9. 格式化I/O函数2.10. C标准库的I/O缓冲区2.11. 本节综合练习
6
3. 数值字符串转换函数4. 分配内存的函数26. 链表、二叉树和哈希表1. 链表1.1. 单链表1.2. 双向链表1.3. 静态链表1.4. 本节综合练习2. 二叉树2.1. 二叉树的基本概念2.2. 排序二叉树3. 哈希表27. 本阶段总结III. Linux系统编程28. 文件与I/O1. 汇编程序的Hello world2. C标准I/O库函数与Unbuffered I/O函数3. open/close4. read/write5. lseek6. fcntl7. ioctl8. mmap29. 文件系统1. 引言2. ext2文件系统2.1. 总体存储布局2.2. 实例剖析2.3. 数据块寻址2.4. 文件和目录操作的系统函数3. VFS3.1. 内核数据结构3.2. dup和dup2函数30. 进程1. 引言
7
2. 环境变量3. 进程控制3.1. fork函数3.2. exec函数3.3. wait和waitpid函数4. 进程间通信4.1. 管道4.2. 其它IPC机制5. 练习:实现简单的Shell31. Shell脚本1. Shell的历史2. Shell如何执行命令2.1. 执行交互式命令2.2. 执行脚本3. Shell的基本语法3.1. 变量3.2. 文件名代换(Globbing):* ? []3.3. 命令代换:`或 $()3.4. 算术代换:$(())3.5. 转义字符\3.6. 单引号3.7. 双引号4. bash启动脚本4.1. 作为交互登录Shell启动,或者使用--login参数启动4.2. 以交互非登录Shell启动4.3. 非交互启动4.4. 以sh命令启动5. Shell脚本语法5.1. 条件测试:test [5.2. if/then/elif/else/fi5.3. case/esac5.4. for/do/done5.5. while/do/done5.6. 位置参数和特殊变量5.7. 函数6. Shell脚本的调试方法
8
32. 正则表达式1. 引言2. 基本语法3. sed4. awk5. 练习:在C语言中使用正则表达式33. 信号1. 信号的基本概念2. 产生信号2.1. 通过终端按键产生信号2.2. 调用系统函数向进程发信号2.3. 由软件条件产生信号3. 阻塞信号3.1. 信号在内核中的表示3.2. 信号集操作函数3.3. sigprocmask3.4. sigpending4. 捕捉信号4.1. 内核如何实现信号的捕捉4.2. sigaction4.3. pause4.4. 可重入函数4.5. sig_atomic_t类型与volatile限定符4.6. 竞态条件与sigsuspend函数4.7. 关于SIGCHLD信号34. 终端、作业控制与守护进程1. 终端1.1. 终端的基本概念1.2. 终端登录过程1.3. 网络登录过程2. 作业控制2.1. Session与进程组2.2. 与作业控制有关的信号3. 守护进程35. 线程1. 线程的概念
9
2. 线程控制2.1. 创建线程2.2. 终止线程3. 线程间同步3.1. mutex3.2. Condition Variable3.3. Semaphore3.4. 其它线程间同步机制4. 编程练习36. TCP/IP协议基础1. TCP/IP协议栈与数据包封装2. 以太网(RFC 894)帧格式3. ARP数据报格式4. IP数据报格式5. IP地址与路由6. UDP段格式7. TCP协议7.1. 段格式7.2. 通讯时序7.3. 流量控制37. socket编程1. 预备知识1.1. 网络字节序1.2. socket地址的数据类型及相关函数2. 基于TCP协议的网络程序2.1. 最简单的TCP网络程序2.2. 错误处理与读写控制2.3. 把client改为交互式输入2.4. 使用fork并发处理多个client的请求2.5. setsockopt2.6. 使用select3. 基于UDP协议的网络程序4. UNIX Domain Socket IPC5. 练习:实现简单的Web服务器5.1. 基本HTTP协议5.2. 执行CGI程序A. 10
字符编码1. ASCII码2. Unicode和UTF-83. 在Linux C编程中使用Unicode和UTF-8B. GNU Free Documentation License Version 1.3, 3 November 2008参考书目索引
下一页
历史全国嵌入式人才培训基地
11
全国嵌入式人才培训基地
历史上一页
下一页
历史
请点评
本书改编和包含了以下两本书的部分章节,这两本书均以GNU Free Documentation License发布。
How To Think Like A Computer Scientist: Learning with C++
作者Allen B. Downey。原书由Green Tea Press发行,可以从http://www.greenteapress.com/下载到。
Programming from the Ground Up: An Introduction to Programming using Linux AssemblyLanguage
作者Jonathan Bartlett。原书由Bartlett Publishing发行,可以从http://savannah.nongnu.org/projects/pgubook/下载到。上一页
下一页
Linux C
编程一站式学习
起始页
前言全国嵌入式人才培训基地
12
全国嵌入式人才培训基地
附录 B. GNU Free Documentation License Version 1.3, 3 November 2008上一页
下一页
附录 B. GNU Free Documentation License Version 1.3, 3 November 2008
请点评
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/>Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.0. PREAMBLEThe purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.1. APPLICABILITY AND DEFINITIONSThis License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.The "publisher" means any person or entity that distributes copies of the Document to the public.A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.2. VERBATIM COPYINGYou may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.You may also lend copies, under the same conditions stated above, and you may publicly display copies.3. COPYING IN QUANTITYIf you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.4. MODIFICATIONSYou may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: * A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. * B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. * C. State on the Title page the name of the publisher of the Modified Version, as the publisher. * D. Preserve all the copyright notices of the Document. * E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. * F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. * G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. * H. Include an unaltered copy of this License. * I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. * J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. * K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. * L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. * M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. * N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. * O. Preserve any Warranty Disclaimers.If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.5. COMBINING DOCUMENTSYou may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".6. COLLECTIONS OF DOCUMENTSYou may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.7. AGGREGATION WITH INDEPENDENT WORKSA compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.8. TRANSLATIONTranslation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.9. TERMINATIONYou may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.10. FUTURE REVISIONS OF THIS LICENSEThe Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.11. RELICENSING"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site."CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization."Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.ADDENDUM: How to use this License for your documentsTo use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with … Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.上一页
下一页
3.
在
Linux C
编程中使用
Unicode
和
UTF-8 起始页
参考书目全国嵌入式人才培训基地
13
全国嵌入式人才培训基地
前言上一页
下一页
前言
请点评
这本书有什么特点?面向什么样的读者?
请点评
这本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一。该课程是为期四个月的全日制职业培训,要求学员毕业时具备非常Solid的C编程能力,能熟练地使用Linux系统,同时对计算机体系结构与指令集、操作系统原理和设备驱动程序都有较深入的了解。然而学员入学时的水平是非常初级而且参差不齐的:学历有专科、本科也有研究生,专业有和计算机相关的也有很不相关的(例如会计专业),以前从事的职业有和技术相关的也有完全不相关的(例如HR),年龄从二十出头到三十五六岁的都有。这么多背景完全不同、基础完全不同、思维习惯和理解能力完全不同的人来听同一堂课,大家都迫切希望学会嵌入式开发技术,投身IT行业,这就是职业教育的特点,也是我编这本书时需要考虑的主要问题。
学习编程绝不是一件简单的事,尤其是对于零基础的初学者来说。大学的计算机专业有四年时间从零基础开始培养一个人,微积分、线代、随机、离散、组合、自动机、编译原理、操作系统、计算机组成原理等等一堆基础课,再加上C/C++、Java、数据库、网络、软件工程、计算机图形学等等一堆专业课,最后培养出一个能找到工作的学生。很遗憾这最后一条很多学校没有做好,来亚嵌培训的很多学生就是四年这么学过来的,但据我们考查他们的基础几乎为零,我不知道为什么。与之形成鲜明对比的是,只给我们四个月的时间,同样要求从零基础开始,最后培养出一个能找到工作的学生,而且还要保证他找到工作,这就是职业教育的特点。
为什么我说“只给我们四个月的时间”?我们倒是想教四年呢,但学时的长短我们做不了主,是由市场规律决定的。四年的任务要求四个月做好,要怎么完成这样一个几乎不可能的任务?有些职业教育给出的答案是“实用主义”,打出了“有用就学,没有用就不学”的口号,大肆贬低说大学里教的基础课都是过时的、无用的,只有他们教的技术才是实用的,这种炒作很不好,我认为大学里教的每一门课都是非常有用的,基础知识在任何时候都不会过时,倒是那些时髦的“实用技术”有可能很快就过时了。
四年的任务怎么才能用四个月做好?我们给出的答案是“优化”。现在大学里安排的课程体系最大的缺点就是根本不考虑优化。每个过来人都会有这样的感觉:大一大二学了好多数学课,却不知道都是干什么用的,为什么要学。连它有什么用都不知道怎么能有兴趣学好呢?然后到大三大四学专业课时,用到以前的知识了,才发现以前学的数学是多么有用,然而早就忘得一干二净了,考完试都还给老师了,回头重新学吧,这时候才发现很多东西以前根本没学明白,现在才真的学明白了,那么前两年的时间岂不是都浪费了?大学里的课程体系还有一个缺点就是不灵活,每门课必须占一个学期,必须由一个老师教,不同课程的老师之间没有任何沟通和衔接,其实这些课程之间是相互依赖的,把它们强行拆开是不符合人的认知规律的。比如我刚上大学的时候,大一上半学期就被逼着学C语言,其实C语言是一门很难的编程语言,不懂编译原理、操作系统和计算机体系结构根本不可能学明白,那半个学期自然就浪费掉了。当时几乎所有学校的计算机相关专业都是这样,大一上来就学C语言,有的学校更疯狂,上来就学C++,导致大多数学生都以为自己会C语言,但其实都是半吊子水平,到真正写代码的时候经常为一个Bug搞得焦头烂额,却没有机会再系统地学一遍C语言,因为在学校看来,C语言课早在大一就给你“上完了”,就像一顿饭已经吃完了,不管你吃饱没吃饱,不会再让你重吃一遍了。显而易见,如果要认真地对这些课程做优化,的确是有很多水份可以挤的。
本书有以下特点:不是孤立地讲C语言,而是和编译原理、操作系统、计算机体系结构结合起来讲。或者说,本书的内容只是以C语言为载体,真正讲的是计算机的原理和程序的原理。强调基本概念和基本原理,在编排顺序上非常重视概念之间的依赖关系,每次引入一个新的概念,只依赖于前面章节已经讲过的概念,而绝不会依赖后面章节要讲的概念。有些地方为了叙述得完整,也会引用后面要讲的内容,比如说“有关XX我们到XX章再仔细讲解”,凡是这种引用都不是必要的依赖,可以当它不存在,只管继续往下看就行了。尽量做到每个知识点直到要用的时候才引入。过早引入一个知识点,讲完了又不用它,读者很快就会遗忘,这是不符合认知规律的。
14
这是一本从零基础开始学习编程的书,不要求读者有任何编程经验,但读者至少需要具备以下素质:熟悉Linux系统的基本操作。如果不具备这一点,请先参考其它教材学习Linux系统的基本操作,熟练之后再学习本书,《鸟哥的Linux私房菜》据说是Linux系统管理和应用方面比较好的一本书。但学习本书并不需要会很多系统管理技术,只要会用基本命令,会自己安装系统和软件包就足够了。具有高中毕业的数学水平。本书会用到高中的数学知识,事实上,如果不具有高中毕业的数学水平,也不必考虑做程序员了。但并不是说只要具有高中毕业的数学水平就足够做程序员了,只能说看这本书应该没有问题,数学是程序员最重要的修养,计算机科学其实就是数学的一个分支,如果你的数学功底很差,日后还需恶补一下。具有高中毕业的英文水平。理由同上。对计算机的原理和本质深感兴趣,不是为就业而学习,不是为拿高薪而学习,而是真的感兴趣,想把一切来龙去脉搞得清清楚楚而学习。勤于思考。本书尽最大努力理清概念之间的依赖关系,力求一站式学习,读者不需要为了找一个概念的定义去翻其它书,也不需要为了搞清楚一个概念在本书中前后一通乱翻,只需从前到后按顺序学习即可。但一站式学习并不等于傻瓜式学习,有些章节有一定的难度,需要积极思考才能领会。本书可以替你节省时间,但不能替你思考,不要指望像看小说一样走马观花看一遍就能学会。
又是一本C语言书。好吧,为什么我要学这本书而不是谭浩强或者K&R?
请点评
谭浩强的书我就不说什么了。居然教学生include一个.c文件。
K&R是公认的世界上最经典的C语言教程,这点毫无疑问。在C标准出台之前,K&R第一版就是事实上的C标准。C89标准出台之后,K&R跟着标准推出了第二版,可惜此后就没有更新过了,所以不能反映C89之后C语言的发展以及最新的C99标准,本书在这方面做了很多补充。上面我说过了,这本书与其说是讲C语言,不如说是以C语言为载体讲计算机和操作系统的原理,而K&R就是为了讲C语言而讲C语言,侧重点不同,内容编排也很不相同。K&R写得非常好,代码和语言都非常简洁,但很可惜,只有会C语言的人才懂得欣赏它,K&R是非常不适合入门学习的,尤其不适合零基础的学生入门学习。
这本书“
是什么”和“
不是什么”
请点评
本书包括三大部分:C语言入门。介绍基本的C语法,帮助没有任何编程经验的读者理解什么是程序,怎么写程序,培养程序员的思维习惯,找到编程的感觉。前半部分改编自[
ThinkCpp]。C语言本质。结合计算机和操作系统的原理讲解C程序是怎么编译、链接、运行的,同时全面介绍C的语法。位运算的章节改编自亚嵌教育林小竹老师的讲义,链表和二叉树的章节改编自亚嵌教育朱老师的讲义。汇编语言的章节改编自[
GroudUp],在该书的最后一章提到,学习编程有两种Approach,一种是Bottom Up,一种是TopDown,各有优缺点,需要两者结合起来。所以我编这本书的思路是,第一部分Top Down,第二部分BottomUp,第三部分可以算填了中间的空隙,三部分全都围绕C语言展开。Linux系统编程。介绍各种Linux系统函数和内核的工作原理。Socket编程的章节改编自亚嵌教育卫剑钒老师的讲义。
这本书定位在入门级,虽然内容很多,但不是一本百科全书,除了C语言基本要讲透之外其它内容都不深入,书中列出了很多参考资料,是读者进一步学习的起点。K&R的第一章是一个Whirlwind Tour,把全书的内容简单过了一遍,然后再逐个深入进去讲解。本书也可以看作是计算机专业课程体系的一个Whirlwind Tour,学习完本书之后有了一个全局观,再去学习那些参考资料就应该很容易上手了。
为什么要在Linux平台上学C语言?用Windows学C语言不好吗?
请点评
用Windows还真的是学不好C语言。C语言是一种面向底层的编程语言,要写好C程序,必须对操作系统的工作原理非常清楚,因为操作系统也是用C写的,我们用C写应用程序直接使用操作系统提供的接口。既然你选择了看这本书,你一定了解:Linux是一种开源的操作系统,你有任何疑问都可以从源代码和文档中找到答案,即使你看不懂源代码,也
15
找不到文档,也很容易找个高手教你,各种邮件列表、新闻组和论坛上从来都不缺乐于助人的高手;而Windows是一种封闭的操作系统,除了微软的员工别人都看不到它的源代码,只能通过文档去猜测它的工作原理,更糟糕的是,微软向来喜欢藏着揶着,好用的功能留着自己用,而不会写到文档里公开。本书的第一部分在Linux或Windows平台上学习都可以,但第二部分和第三部分介绍了很多Linux操作系统的原理以帮助读者更深入地理解C语言,只能在Linux平台上学习。
Windows平台上的开发工具往往和各种集成开发环境(IDE,Integrated Development Environment)绑在一起,例如Visual Studio、Eclipse等。使用IDE确实很便捷,但IDE对于初学者绝对不是好东西。微软喜欢宣扬傻瓜式编程的理念,告诉你用鼠标拖几个控件,然后点一个按钮就可以编译出程序来,但是真正有用的程序有哪个是这么拖出来的?很多从Windows平台入门学编程的人,编了好几年程序,还是只知道编完程序点一个按钮就可以跑了,把几个源文件拖到一个项目里就可以编译到一起了,如果有更复杂的需求他们就傻眼了,因为他们脑子里只有按钮、菜单的概念,根本没有编译器、链接器、Makefile的概念,甚至连命令行都没用过,然而这些都是初学编程就应该建立起来的基本概念。另一方面,编译器、链接器和C语言的语法有密切的关系,不了解编译器、链接器的工作原理,也不可能真正掌握C的语法。所以,IDE并没有帮助你学习,而是阻碍了你学习,本来要学好C编程只要把语法和编译命令学会就行了,现在有了IDE,除了学会语法和编译命令,你还得弄清楚编译命令和IDE是怎么集成的,这才算学明白了,本来就很复杂的学习任务被IDE搞得更加复杂了。Linux用户的使用习惯从来都是以敲命令为主,以鼠标操作为辅,从学编程的第一天起就要敲命令编译程序,等到你把这些基本概念都搞清楚了,你觉得哪个IDE好用你再去用,不过到那时候你可能会更喜欢vi或emacs而不是IDE了。
致谢
请点评
本书的写作得到北京亚嵌教育研究中心的全力支持,尤其感谢李明老师和何家胜老师,没有公司的支持,我不可能有时间有条件写这本书,也不可能有机会将这本书公开在网上。
然后要感谢亚嵌教育的历届学员和各位老师,在教学和讨论过程中我经常会得到有益的启发,这些都促使这本书更加完善。在本书的写作过程中,很多读者为本书提出很有价值的建议,很多建议是热心网友通过在线评论提的,有些网友我只知道id或email。都列在下面,排名不分先后。
感谢北京亚嵌教育研究中心的老师们:李明,何家胜,邸海霞,郎铁山,朱仲涛,廖文江,韩超,吴岳,邢文鹏,何晓龙,林小竹,卫剑钒。
感谢热心网友:ddd(ddd@clf.net),wuyulei(wuyulei0210@163.com),comma(commapopo@hotmail.com),田伟(sioungiep@zzxy.org),田雨(tianyu_1123@hotmail.com ),daidai(daidai0628@sina.com),邓楠(monnand@gmail.com),杜朴风(cplusplus@zzxy.org),Zoom.Quiet(zoom.quiet@gmail.com),陈老师(cljcore@gmail.com),杨景(yangbajing@gmail.com),章钰(buptzhangyu@163.com),chen(cry2133@gmail.com),JiaweiZhang(rhythm.zhang@gmail.com),waterloo(waterloo2005@gmail.com),张现超(zxqianrong@gmail.com,http://zxqianrong.is-programmer.com/),曾宇(uyucn@163.com),董俊波(dongjunbo@gmail.com),RobinXiang(dancelinux@gmail.com),刘艳明(lonny_liu@hotmail.com),付(been2100@163.com),cleverd(crossie@qq.com),orange(juicerococo@hotmail.com),徐斌(simlink_xub@163.com),cyy(cyy198767@hotmail.com),Linux_Xfce(coodycody23@gmail.com),冯海云(906702745@qq.com),侯延祥(houyx2008@163.com),churchmice(firefoxelectric@gmail.com),linux----00xx00xxooxx(codycody23@gmail.com),syfeagle(syfeagle@hotmail.com),王公仆(wanggongpu@gmail.com),刘敏(liuminchinese@163.com),Laciq(dd@qq.com),yuchen(yuchen12@gmail.com),陆杨(doctorhslyyang@gmail.com),陈杨希(fusang12@126.com),love_wc3(love_wc3@163.com),姚磊(yaolei135@gmail.com),芝麻(shouer@foxmail.com),宇(wadenx@126.com),沈震(asillybird@zzxy.org),bing(sunbingfly@gmail.com),mick(huimin47@gmail.com),baaluck(baaluck@gmail.com),曹帅军(caoshuaijun@gmail.com),zhoudy(dongyong800@163.com),朱夜光(zhuyeguang@163.com),刺猬(littlehedgehog@qq.com),san(leezhenfeng@msn.com),王兆宏(zhao_hong_wang@sina.com),徐凯(romanxk@163.com)。
在写作过程中我遇到过很多困难,工作繁忙,对未来迷茫,生活压力大,缺乏安全感,个人琐事等等。然而有这么多热心的同学、老师、朋友、网友在等着看我的书更新,给我提建议希望我把书改得更完善,这是我坚持写下去的最大的动力。谢谢你们!
16
最后几句话
请点评
和大多数作者一样,最后我要说的是我水平十分有限,没写过C编译器和C标准库,我不能保证书中的内容全部正确,如有错误欢迎批评指正。遗憾的是很多作者把这句话当成了挡箭牌,当成了自己不必竭尽全力保证内容正确性的借口。写书是一件严肃的事,书中的错误所有人都看得见,白纸黑字赖不掉的。我教过的很多学生都在大学里学过C语言,甚至考过二级,但程序写得一塌糊涂,连最基本的概念都搞错了,以前学过的C语言教材中的错误在他们脑子里根深蒂固,即使我纠正多次,他们仍然只记得以前学过的错误概念,这种有基础的学生还不如没有任何基础的学生教起来容易。我非常害怕我教给别人的仍然是错的,所以我仔细研究了C99之后才敢动笔写书。这本书涵盖的话题比较广泛,我竭尽全力也不足以保证书中的内容全部正确,还要依靠社区的力量一起来完善这本书,这样才能真正对读者负责,所以我选择将这本书开源。
希望本书成为你求学道路上的第一个伙伴。
宋劲杉 北京 2008年11月27日
qiaocsk2 于 2010-09-19 23:31:27发表:
顶,支持!
雨然 于 2010-09-19 21:07:30发表:
想下载!!钱不够……悲剧
雨然 于 2010-09-19 21:07:11发表:
想下载!!
mikeli 于 2010-09-19 16:44:00发表:
Linux c编程一站式学习 PDF
mikeli 于 2010-09-19 16:43:47发表:
Linux c编程一站式学习 PDF
mikeli 于 2010-09-19 16:43:27发表:
Linux c编程一站式学习 PDF
mikeli 于 2010-09-19 16:43:06发表:
Linux c编程一站式学习 PDF