准备搞这一块了,网上找的资料,总结下:
=======================================================================
linux下无论做嵌入式开发还是服务器,都需要掌握的知识有网络编程,多线程,内存管理以及异常处理
等知识,服务器的话你要知道网络模型,TCP/IP协议,还有socket编程,以及linux下的调试工具等.
Qt/Gtk/GLADE
熟悉LINUX的相关网络服务。
==================================================================
下面找到一个培训机构的课程,可以参考:
UDA-高级UNIX/Linux服务器开发架构师
■教学目标:强调全真Linux平台开发环境,完全企业真实开发项目,让学员通过9个以上的实际项目全面演练UNIX/Linux平台下POSIX规范,以及Socket网络编程的技能,让学员真正达到云计算企业以及网游、实时消息服务商等企业的技术要求。
■课程大纲:
(UDA 高级部分 共360学时,每天8学时,共9周全部上机
开发E级课程初级部分 共176学时,每天8学时,共5周全部上机 )
◆UDA- UNIX/Linux应用开发整体概述
● UNIX/Linux高级I/O编程
● UNIX/Linux进程与线程开发
● UNIX平台多线程开发
● 进程间通信 TCP/IP协议栈的设计与实现
● UNIX/Linux Socket网络编程与实例
● C/S结构UNIX服务器编程实例
实际项目1:自助点菜系统
实际项目2:自己写一个UNIX文件复制程序
实际项目3:自己写一个文件操作的命令
实际项目4:高效数据中继引擎
实际项目6:UNIX任意定时器
实际项目5:自己动手写一个命令解释器(shell)
实际项目7:利用多线程技术重写 实际案例4:高效数据中继引擎
实际项目8:利用多线程技术重写 实际项目6:UNIX任意定时器
实际项目9:数字媒体广播系统
■课程详细大纲
-------- 第二部分 UDA A级高级部分(E基础部分在后部)-------
◆ UNIX/Linux I/O开发及实例
■标准I/O库
重要数据类型和常量
标准I/O库作为ASNI C定义的一部分,不仅仅定义了I/O行为,还定义了若干常量和宏,对我们认识C语言编程有很重要的意义。
两种I/O操作风格及其适用场合
标准I/O库提供了格式化I/O和原始I/O两种操作风格,完整掌握这两种风格的操作,并学会在日常碰到的各种问题中,选择合适的风格予以解决是C程序员的入门技能之一。
缓冲及其带来的问题和收益
标准I/O库定义了一个用户态的buffer,这个buffer让绝大多数初学者头疼,如何正确看待和使用这个机制对于程序效率和稳定性很重要。
■实际项目1:自助点菜系统
很多学C的初学者总是抱怨"我已经学会C语言了,可是为什么还是什么都写不出来呢?" 这个项目就会给你一个完整的答案!我们仅仅利用前面学过的标准I/O技术(相当于"谭C"),构造一个实际的应用程序。看看我们与实际程序之间相距多远。
项目描述:本项目的目标是实现一个基于WEB的自助点菜系统,系统具备与网内应用服务器提取菜单信息以及将客户点菜信息发往服务器的功能。
要求:
.WEB界面
.数据库访问
.支持点菜、退菜、帐单结算
说明:
增进对Apache WEB服务体系的理解
设计并实现一个真实而完整的WEB应用程序,涉及到数据库访问、HTTP协议、标准I/O库、CGI等编程技术。
强化对标准I/O库的理解,强化Browser/Server软件架构的理解。
■系统I/O库
文件描述符
使用I/O系统调用的最关键参数,认识文件描述符是认识UNIX内部设计的第一步。
系统I/O操作
系统调用层的I/O操作相对简单,但是非常基础,必须练得非常扎实才行。
描述符操作
理解了文件描述符之后,就可以利用若干系统调用对I/O行为进行更细微的操作了,如dup(2)、fcntl(2)、ioctl(2)等等
性能的问题
与标准I/O操作相比,系统调用层的I/O少了一层buffer,那么我们研究一下什么强况下使用什么接口进行操作。
■文件系统操作
stat(2)及其相关问题
获取文件的详细信息,并分析结果。
■UNIX文件系统的原理
利用传统的UFS文件系统,了解UNIX文件系统的架构和设计思想,我们可以完整地看到诸如i-node的具体意义,并通过对ext2的分析,实践我们在算法与数据结构课上学到的知识。
文件亚数据操作
我们可以了解到coreutil包中的大部分命令的实现内幕。
连接
有了对文件系统的理解,我们可以完整地掌握硬连接和符号连接的具体意义。
目录操作
这是程序员的基本技能之一。我们将了解两种操作方式。
■实际项目2:自己写一个UNIX文件复制程序
复制文件这件事情说起来简单,做起来是另一回事!你可以用含空洞的文件仔细测试一下系统内置cp的行为,你会发现不是那么简单。我们在这里就要模仿一个coreutil中的cp命令。
项目描述:可靠地实现一个系统基本命令cp。
要求:
.可靠
.设备无关
.命令行参数解析
.支持文件空洞
说明:
实现一个真实的console应用程序,涉及到对各种IO异常的预见和处理、命令行参数的解析、各种类型文件的处理。
强化对系统I/O的理解、强化对目录访问。
■实际项目3:自己写一个文件操作的命令
项目描述:可靠地实现一个系统基本命令
要求:
.可靠
.设备无关
.命令行参数解析
.支持颜色显示
说明:
实现一个真实的console应用程序,涉及到stat(2)、命令行参数解析、目录访问、ANSI终端规程。
强化对stat(2)系统调用的理解。
■高级I/O操作
非阻塞I/O
I/O多路复用
Linux提供的高性能epoll
信号驱动I/O
POSIX异步I/O
mmap(2)
■实际项目4:高效数据中继引擎
项目描述:可靠地实现一个通用描述符对数据中继引擎,这是一个经常用于高密度服务(如网游、中间件等)的算法。
要求:
.可靠
.灵活适应各种流程
.使用epoll(2)
.支持至少4000对套接字、管道或终端描述符间并发操作
.封装成动态库模块
说明:
实现一个对大量文件描述符对进行数据中继的模块,利用epoll实现。
强化对select(2)、poll(2)、epoll(2)(LT与ET)、aio_*系统调用的理解。掌握实现类似功能时的一般设计思路,推广后实现任意协议的有限状态机编码。
◆UNIX进程与线程设计与实例
■进程环境
进程的开始和终止
进程的内存布局
Intel X86函数调用规范
环境变量
动态库技术解析
长跳转及其应用
进程资源限制
■多进程编程
主要介绍多进程编程的原理,乃至shell运作的原理。
进程创建
装载外部命令
回收僵尸进程
进程的身份标识 理解UNIX如何实现多用户权限隔离,并掌握u+s权限实现的细节,以及如何编写u+s权限的程序。
解释器文件的原理
为什么UNIX下几乎所有的脚本语言都以“#”作为注解符号,仅仅是巧合吗?本部分做解释。
进程时间
进程关系
进程组、会话组的概念奇迹应用。
■实际项目5:自己动手写一个命令解释器(shell)
项目描述:本项目的目标是实现一个交互式shell程序。
要求:
.简单可靠
.支持环境变量
.支持基本的内部命令
.支持IO重定向
说明:
设计并实现一个交互式shell,设计进程环境、进程控制、系统IO操作。
强化对多进程编程的理解以及对标准shell的理解。
■信号
信号的概念
信号是UNIX提供的重要异步构件,所有UNIX程序员都要掌握这个机制,同时也是学习难点。
信号的操控
对信号最基本的操作就是发送和捕获,利用信号我们可以大大提高代码的表达能力,做到以前做不到的事情。
不可靠的信号语义
可靠的信号语义
关于信号的可靠与不可靠,很多人抱有错误的想法。信号的可靠与否和网络传输的可靠与否完全不同!
几个重要信号的典型应用
重点介绍闹钟信号和子进程改变信号。
POSIX对信号语义的发展
POSIX从BSD的信号机制出发,发展了更精确、更强大的信号操控接口,也是我们学习和日后主要使用的方法。
POSIX实时信号
弥补了传统信号的缺憾,让信号能够更承载更广泛的应用。
■实际项目6:UNIX任意定时器
有人在BBS上发过牢骚,说UNIX给每个进程设计一个定时器太少了,复杂的定时不够用...这是一个不求甚解的观点,用一个时钟当然可以实现任意多个定时器。
项目描述:本项目的目标是利用进程的单一定时器实现任意多定时操作
要求:
.简单可靠
.支持至少1024个定时作业
.定时器精度在0.1秒內
.封装成动态库模块
说明:
设计并实现一个任意定时器,具有很高的实践意义,很多应用程序中都有这个要求。涉及到信号操作、数据结构的使用。
强化信号的使用技巧。
■多线程编程
线程的概念
什么是线程?为什么会出现线程?线程的实现方式?
线程与进程的性能比较分析
是不是一个多进程程序改用多线程实现就会提高性能呢?这是个非常不确定的问题,很多情况下答案是出乎意料的。
POSIX线程接口
面试的时候,有的同学曾被问到“POSIX线程是1:1的还是1:N的?”这是个阴险的陷阱...
线程的同步
很简单,但是极其重要!多线程算法多数BUG的来源。我们将学会互斥体、条件变量等线程互斥机制的应用。
线程属性
OpenMP线程接口
POSIX线程接口太繁琐了,有没有简单的线程并发方案呢?OpenMP就是一个,我们可以利用这套标准简洁地表达并发逻辑。
POSIX线程在Linux上的实现
Linux的NPTL一直是它的亮点,我们认识一下Linux对线程的实现有助于我们在Linux平台开发程序的时候做出正确的决策。
■实际项目 7:利用多线程技术重写 实际案例4:高效数据中继引擎
■实际项目 8:利用多线程技术重写 实际项目6:UNIX任意定时器
◆ UNIX进程间通信设计与开发
■文件锁
最基础的进程互斥机制,很常用,很好用。但是一定不能跟线程间的互斥体混为一谈,二者基本不可互换。
■管道
匿名管道
作为UNIX世界最经典、最简洁的通讯机制,每个程序员都必须熟练掌握。在很多情形下,这些简单而基础的机制其实是最好的选择。
命名管道
■XSI(SYS V)IPC
消息队列
信号量数组
共享内存段
对于这三个IPC手段,常见的一个错误问题就是“这三个哪个更好?”,这三个机制设计出来是为了解决不同问题的,三者各有特色,所以不存在谁更好的问题,我们要学会的是在什么场合应该使用什么机制。
■套接字
可以说,学习这门课的人,绝大多数就是为了学习这部分课程。但是实际上,当这门课学到这个阶段的时候,你应该已经觉得套接字根本不是什么难点了,大部分问题已经在前面解决了,只要记住有数的几个流程就行了。在写网络程序的时候,主要精力其实并不放在这里。
流式套接字操作流程
报式套接字操作流程
基于TCP/IP的套接字
IPv4广播和多播套接字
加密传输和压缩传输
通过OpenSSL和zlib库进行加密和压缩传输实际上很简单,这里主要是介绍SSL的原理和部署配置。
■实际项目9:数字媒体广播系统
要求:
.C/S结构
.基于IPv4多播实现
.支持至少256个节目频道
.具有基本的用户验证功能
.客户端界面与功能高度分离,以便采用不同语言开发
.开环式流控
.认证流程加密传输(采用SSL或者其他方案)
.方便的频道内容管理策略
说明:
设计并实现一个真实和完整的Client/Server软件系统,可基于LAN(或VLAN、MBone)实施的数字音频广播系统,涉及到流式和报式网络套接字通讯、MP3解码、插件化设计方法以及存储系统设计编程技术。
带领大家建立起团队开发和协同工作的企业项目开发模式的概念和流程,强化学员对编写项目概要设计文档和详细设计文档的理解,为就业前的职业技能和素质训练做好充分准备。
--------------------- 第一部分 基础部分------------------
一、Linux系统基础 (3天)
教学目标: 能比较熟练的安装、操作Linux系统, 并能配置开发环境与常用服务.
1.Linux基础
. 系统安装
. 帮助系统
. 文件管理
. 用户组
. 文本处理与编辑
2. Linux常用命令
. 查找
. 压缩
. 输入/出重定向
. 管道
. 启动脚本
. 软件安装
. x-window
3. Linux网络配置
. TCP/IP简介
. 网卡配置
. DNS配置
. nfs
. ssh
二、shell程序设计(2天)
教学目标:能用Shell处理简单的批量化工作
1.Bash Shell初步
. 变量
. 运算符
. 流程控制
. 环境变量
2、Bash Shell进阶
. 文件操作
. 函数
. 输入输出
三、C语言程序设计 (10天)
教学目标: 能设计普通的应用程序
案例教学: a、指法练习程序
b、汉诺塔游戏
1.C语言基础
2. 函数
3. 数组
4. 指针
. 指针的定义
. 指针运算符
. 指针的加减
. 动态内存分配
. 堆与栈
5、数组指针
. 指针数组
. 数组指针
6. 预编译与VT控制码
. 声明与头文件
. 静态链接库
. 动态链接库
. ANSI VT控制码
7. 组合数据类型
. 结构体
. 结构体指针
. 枚举
. 共用体 (联合)
8. 指针高级应用
. 二级指针
. 三级指针
. 多级指针
. 函数指针
. C语言与面向对象
9.文件操作
. 标准I/O (fopen)
10、辅助开发工具
. Makefile的编写
. GDB的使用
. CVS与配置管理
四、数据结构 (7天)
教学目标: 熟悉常用的数据结构与算法
教学案例: 1、成绩管理系统
2、计算器
3、电子词典
4、文件压缩器
1.单向链表
. 链表的创建
. 链表的遍历
. 结点的添加、删除
. 基于函数指针的查找
2、Linux内核链表
. 双向链表
. Linux内核链表的创建
. List结构的作用
. 有头与无头链表
3、排序及查找
. 冒泡排序
. 快速排序
. 选择排序
. 查入排序
4、Hash表
. Hash算法
. Hash表的创建
. 遍历
5、队列和堆栈
. 数组存储
. 链式存储
6、树与二叉树
. 数组存储
. 链式存储
. 权值的概念
. Huffman树
. Huffman编码
7、广义表
. 组合链表的应用
. 广义表