linux下的C语言编程(总结篇)

Linux开发 专栏收录该内容
17 篇文章 8 订阅


【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】


    在Linux下面关于C语言的内容其实挺多的。不同的人关注的地方也不一样。关注系统设计的人可能更关注整个linux系统的结构;设计驱动的人可能更关注linux驱动的配置和实现;而我在这里所关注的只是linux应用层方面的内容,属于最基础的内容,当然也是最重要的内容。实际上对应于C语言的理解在很大程度上决定了你对整个计算机系统的理解程度。从本质上说,linux和windows的区别其实远没有外界想象的那么大,当然我说的这些都是设计层面的东西。有些兴趣的朋友可以看看潘爱明的《windows内核原理和实现》这本书,然后再看看《linux内核设计和实现》这本书,相信会有不少的体会。这里做一个总结,一方面是为了给这一段的linux学习做一个总结,另外一方面也是为了给后来学习的朋友带来一些帮助。


展开阅读全文
相关推荐
<p> 这是一门linuxc++通讯架构实战课程,针对c/c++语言已经掌握很熟并希望进一步深造以将来用c++在linux从事网络通讯领域/网络服务器开发和架构工作。<br /> <br /> 这门课程学习难度颇高但也有着极其优渥薪水最少30K月薪,最高可达60-80K月薪,这门课程,会先从nginx源码分析和讲解开始,逐步开始书写属于自己高性能服务器框架代码,完善个人代码库,这些,将会是您日后能取得高薪重要筹码。 </p> <p> <br /> </p> <p> <span style="color:#E53333;">本课程原计划带着大家逐行写代码,但因为代码实在过于复杂和精细,带着写代码可能会造成每节课至少要4~5小时超长时间,所以老师会在课前先写好代码,主要时间花费在逐行讲解这些代码上,这一点望同学们周知。如果你觉得非要老师领着写代码才行话,老师会觉得你当前可能学习本门课程会比较吃力,请不要购买本课程,以免听不懂课程并给老师差评,差评也会非常影响老师课程销售并造成其他同学误解。</span> </p> <p> <br /> </p> <p> 这门课程要求您具备技能:<br /> (1)对c/c++语言掌握非常熟练,语言本身已经不是继续学习障碍,并不要求您一定熟悉网络或者linux;<br /> (2)对网络通讯架构领域有兴趣、勇于挑战这个高难度开发领域并期望用大量付出换取高薪;<br /> <br /> 在这门课程中,实现了一个完整项目,其中包括通讯框架和业务逻辑框架,浓缩总结起来包括如几点:<br /> (1)项目本身是一个极完整多线程高并发服务器程序;<br /> (2)按照包头包体格式正确接收客户端发送过来数据包, 完美解决收包时数据粘包问题;<br /> (3)根据收到不同来执行不同业务处理逻辑;<br /> (4)把业务处理产生结果数据包正确返回给客户端;<br /> <br /> 本项目用到主要开发技术和特色包括:<br /> (1)epoll高并发通讯技术,用到触发模式是epoll中水平触发模式【LT】;<br /> (2)自己写了一套线程池来处理业务逻辑,调用适当业务逻辑处理函数处理业务并返回给客户端处理结果;<br /> (3)线程之间同步技术包括互斥量,信号量等等;<br /> (4)连接池中连接延迟回收技术,这是整个项目中精华技术,极大程度上消除诸多导致服务器程序工作不稳定因素;<br /> (5)专门处理数据发送一整套数据发送逻辑以及对应发送线程;<br /> (6)其他次要技术,包括信号、日志打印、fork()子进程、守护进程等等; </p> <div> <br /> </div>
作者:宋劲杉,PDF 格式,大小 8 Mb。 这是一本从零基础开始学习编程书,不要求读者有任何编程经验,但读者至少需要具备以素质: 熟悉Linux系统基本操作。如果不具备这一点,请先参考其它教材学习Linux系统基本操作,熟练之后再学习本书,《鸟哥Linux私房菜》据说是Linux系统管理和应用方面比较好一本书。但学习本书并不需要会很多系统管理技术,只要会用基本命令,会自己安装系统和软件包就足够了。 具有高中毕业数学水平。本书会用到高中数学知识,事实上,如果不具有高中毕业数学水平,也不必考虑做程序员了。但并不是说只要具有高中毕业数学水平就足够做程序员了,只能说看这本书应该没有问题,数学是程序员最重要修养,计算机科学其实就是数学一个分支,如果你数学功底很差,日后还需恶补一。 具有高中毕业英文水平。理由同上。 对计算机原理和本质深感兴趣,不是为就业而学习,不是为拿高薪而学习,而是真感兴趣,想把一切来龙去脉搞得清清楚楚而学习。 勤于思考。本书尽最大努力理清概念之间依赖关系,力求一站式学习,读者不需要为了找一个概念定义去翻其它书,也不需要为了搞清楚一个概念在本书中前后一通乱翻,只需从前到后按顺序学习即可。但一站式学习并不等于傻瓜式学习,有些章节有一定难度,需要积极思考才能领会。本书可以替你节省时间,但不能替你思考,不要指望像看小说一样走马观花看一遍就能学会。 内容预览: 历史 前言 I. C语言入门 1. 程序基本概念 1. 程序和编程语言 2. 自然语言和形式语言 3. 程序调试 4. 第一个程序 2. 常量、变量和表达式 1. 继续Hello World 2. 常量 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. 数组 1. 数组基本概念 2. 数组应用实例:统计随机数 3. 数组应用实例:直方图 4. 字符串 5. 多维数组 9. 编码风格 1. 缩进和空白 2. 注释 3. 标识符命名 4. 函数 5. indent工具 10. gdb 1. 单步执行和跟踪函数调用 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. 2's Complement表示法 3.4. 有符号数和无符号数 4. 浮点数 15. 数据类型详解 1. 整型 2. 浮点型 3. 类型转换 3.1. Integer Promotion 3.2. Usual Arithmetic Conversion 3.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 Point 4. 运算符总结 17. 计算机体系结构基础 1. 内存与地址 2. CPU 3. 设备 4. MMU 5. Memory Hierarchy 18. x86汇编程序基础 1. 最简单编程序 2. x86寄存器 3. 第二个汇编程序 4. 寻址方式 5. ELF文件 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命令行选项 23. 指针 1. 指针基本概念 2. 指针类型参数和返回值 3. 指针与数组 4. 指针与const限定符 5. 指针与结构体 6. 指向指针指针与指针数组 7. 指向数组指针与多维数组 8. 函数类型和函数指针类型 9. 不完全类型和复杂声明 24. 函数接口 1. 本章预备知识 1.1. strcpy与strncpy 1.2. malloc与free 2. 传入参数与传出参数 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/fclose 2.3. stdin/stdout/stderr 2.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. 本节综合练习 3. 数值字符串转换函数 4. 分配内存函数 26. 链表、二叉树和哈希表 1. 链表 1.1. 单链表 1.2. 双向链表 1.3. 静态链表 1.4. 本节综合练习 2. 二叉树 2.1. 二叉树基本概念 2.2. 排序二叉树 3. 哈希表 27. 本阶段总结 III. Linux系统编程 28. 文件与I/O 1. 汇编程Hello world 2. C标准I/O库函数与Unbuffered I/O函数 3. open/close 4. read/write 5. lseek 6. fcntl 7. ioctl 8. mmap 29. 文件系统 1. 引言 2. ext2文件系统 2.1. 总体存储布局 2.2. 实例剖析 2.3. 数据块寻址 2.4. 文件和目录操作系统函数 3. VFS 3.1. 内核数据结构 3.2. dup和dup2函数 30. 进程 1. 引言 2. 环境变量 3. 进程控制 3.1. fork函数 3.2. exec函数 3.3. wait和waitpid函数 4. 进程间通信 4.1. 管道 4.2. 其它IPC机制 5. 练习:实现简单Shell 31. 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/fi 5.3. case/esac 5.4. for/do/done 5.5. while/do/done 5.6. 位置参数和特殊变量 5.7. 函数 6. Shell脚本调试方法 32. 正则表达式 1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在C语言中使用正则表达式 33. 信号 1. 信号基本概念 2. 产生信号 2.1. 通过终端按键产生信号 2.2. 调用系统函数向进程发信号 2.3. 由软件条件产生信号 3. 阻塞信号 3.1. 信号在内核表示 3.2. 信号集操作函数 3.3. sigprocmask 3.4. sigpending 4. 捕捉信号 4.1. 内核如何实现信号捕捉 4.2. sigaction 4.3. pause 4.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. 线程概念 2. 线程控制 2.1. 创建线程 2.2. 终止线程 3. 线程间同步 3.1. mutex 3.2. Condition Variable 3.3. Semaphore 3.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. setsockopt 2.6. 使用select 3. 基于UDP协议网络程序 4. UNIX Domain Socket IPC 5. 练习:实现简单Web服务器 5.1. 基本HTTP协议 5.2. 执行CGI程序 A. 字符编码 1. ASCII码 2. Unicode和UTF-8 3. 在Linux C编程中使用Unicode和UTF-8 B. GNU Free Documentation License Version 1.3, 3 November 2008 参考书目 索引
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值