LINUX环境编程系统培训.ppt_第1页
LINUX环境编程系统培训.ppt_第2页
LINUX环境编程系统培训.ppt_第3页
LINUX环境编程系统培训.ppt_第4页
LINUX环境编程系统培训.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LINUX环境编程系统培训 2009 10 10 目录 文件编程多进程编程和进程控制多线程编程网络基本概念网络编程嵌入式数据库编程其它技巧及常用软件系统架构 文件IO与标准IO的区别文件共享原子操作文件记录锁IO的效率进程打开的文件描述字个数几个常用的函数 文件和目录操作 大多数UNIX文件I O只需用到5个函数 open read write lseek以及close 然后说明不同缓存器长度对read和write函数的影响 上面这些函数经常被称之为不带缓存的I O unbufferedI O 不带缓存 指的是每个read和write都调用内核中的一个系统调用 这些不带缓存的I O函数不是ANSIC的组成部分 但是是POSIX 1和XPG3的组成部分 标准I O提供缓存 目其的是尽可能减少使用read和write调用的数量 它也对每个I O流自动地进行缓存管理 避免了应用程序需要考虑这一点所带来的麻烦 不幸的是 标准I O库令人最感迷惑的也是它的缓存 标准I O有三种缓存类型 全缓存 行缓存 不缓存 1 我们可以通过buffersize c程序来测试缓存的大小 2 我们可以通过iofork c程序来测试缓存给我们带来的困扰 3 我们可以通过bufferio c和fileio c程序来测试文件I O和标准I O的区别 文件I O与标准I O的区别 在例fileshare c中 我们在两个进程中对同一个文件写入 会发现后一次的写入会覆盖前一次的写入 我们可以作这样的改进 在每次写入之前我们先定位到文件结尾 再写入 if lseek fd 0L SEEK END 0 positiontoEOF printf lseekerror s n strerror errno if write fd buff 100 100 andwrite printf writeerror s n strerror errno 这样看起来似乎没有问题 但是实际操作的时候却有可能在执行第一句时被中断 然后由另一进程执行 再切换回来的时候仍然会覆盖另一进程写入的结果 文件共享 上面的问题出在逻辑操作 定位档到文件尾端处 然后写 使用了两个分开的函数调用 解决问题的方法是使这两个操作对于其他进程而言成为一个原子操作 任何一个要求多于1个函数调用的操作都不能成为原子操作 因为在两个函数调用之间 内核有可能会临时挂起该进程 LINUX提供了一种方法使这种操作成为原子操作 其方法就是在打开文件时设置O APPEND标志 另外 我们在创建文件的时候 如果先判断某个文件是否存在 若不存在 则创建它 如果在打开和创建之间 另一个进程创建了该文件 那么就会发生问题 如果在这两个函数调用之间 另一个进程创建了该文件 而且又向该文件写进了一些数据 那么执行这段程序中的creat时 刚写上去的数据就会被擦去 前面讲的open时使用O EXCL便可解决这个问题 一般而言 原子操作 atomicoperation 指的是由多步组成的操作 如果该操作原子地执行 则或者执行完所有步 或者一步也不执行 不可能只执行所有步的一个子集 文件I O中的原子操作 当两个人同时编辑一个文件时 其后果将如何呢 在很多UNIX系统中 该文件的最后状态取决于写该文件的最后一个进程 但是对于有些应用程序 例如数据库 有时进程需要确保它正在单独写一个文件 我们引进记录锁的概念 记录锁 recordlocking 的功能是 一个进程正在读或修改文件的某个部分时 可以阻止其他进程修改同一文件区 文件记录锁操作通过fcntl函数实现 当fcntl的cmd是F GETLK F SETLK或F SETLKW 第三个参数是一个指向flock结构的指针 例子见lockfile c 文件记录锁 在有些情况下 我们从文件中读写数据时并不只能简单的实现访问文件的功能 而要考虑访问的速度 如视频存储录像 文件上传服务 文件访问的速度与I O的缓冲大小有关系 与访问的次数也有关系 也当然与存储的媒体介质类型有关系 如USB接口的移动硬盘与IDE接口的硬盘读写速度便不一样 我们可以通过代码进行测试在多大缓冲时写入的速度最快 I O的效率 access access函数实现按实际用户ID和实际组ID进行存取许可权测试的功能 stat stat函数返回一个与此命名文件有关的信息结构 fstat函数获得已在描述符filedes上打开的文件的有关信息 lstat函数类似于stat 但是当命名的文件是一个符号连接时 lstat返回该符号连接的有关信息 而不是由该符号连接引用的文件的信息 opendir 打开一个目录进行访问readdir 读目录link 创建一个文件的硬链接unlink 删除一个文件 另几个常用的函数 vfork与fork的区别exec与system的区别wait与waitpid信号处理进程间通讯进程运行状态 多进程编程 1 vfork用于创建一个新进程 而该新进程的目的是exec一个新程序 程序 vfork与fork一样都创建一个子进程 但是它并不将父进程的地址空间完全复制到子进程中 因为子进程会立即调用exec 或exit 于是也就不会存访该地址空间 不过在子进程调用exec或exit之前 它在父进程的空间中运行 这种工作方式在某些UNIX的页式虚存实现中提高了效率 2 vfork和fork之间的另一个区别是 vfork保证子进程先运行 在它调用exec或exit之后父进程才可能被调度运行 如果在调用这两个函数之前子进程依赖于父进程的进一步动作 则会导致死锁 vfork与fork的区别 system在其实现中调用了fork exec和waitpid 因此有三种返回值 1 如果fork失败或者waitpid返回除EINTR之外的出错 则system返回 1 而且errno中设置了错误类型 2 如果exec失败 表示不能执行shell 则其返回值如同shell执行了exit 127 一样 3 否则所有三个函数 fork exec和waitpid 都成功 并且system的返回值是shell的终止状态 exec 1 当进程调用一种exec函数时 该进程完全由新程序代换 而新程序则从其main函数开始执行 2 因为调用exec并不创建新进程 所以前后的进程ID并未改变 exec只是用另一个新程序替换了当前进程的正文 数据 堆和栈段 exec与system的区别 当一个进程正常或异常终止时 内核就向其父进程发送SIGCHLD信号 因为子进程终止是个异步事件 这可以在父进程运行的任何时候发生 所以这种信号也是内核向父进程发的异步通知 父进程可以忽略该信号 或者提供一个该信号发生时即被调用执行的函数 信号处理程序 对于这种信号的系统默认动作是忽略它 可以通过wait和waitpid来实现守护进程 见daemon c wait与waitpid 我们的程序在运行中 经常可能会接收到各种信号 在遇到信号时 我们通常要么是忽略这个信号 要么是通过信号处理函数对此信号进行处理 如我们常忽略的信号 SIGPIPE SIGCHLD SIGHUP 我们常常也会对SIGTERM SIGKILL及SIGINT等信号进行处理 信号也常被用在进程间通讯 如常用的两个信号 SIGUSR1和SIGUSR2 信号处理 进程间为什么需要通讯 进程间通讯的几种方式 内存共享管道信号SOCKET 进程间通讯 用户状态 进程在用户状态下运行的状态 内核状态 进程在内核状态下运行的状态 内存中就绪 进程没有执行 但处于就绪状态 只要内核调度它 就可以执行 内存中睡眠 进程正在睡眠并且进程存储在内存中 没有被交换到SWAP设备 就绪且换出 进程处于就绪状态 但是必须把它换入内存 内核才能再次调度它运行 睡眠且换出 进程正在睡眠 且被换出内存 被抢先 进程从内核状态返回用户状态时 内核抢先于它做了上下文切换 调度了另一个进程 原先这个进程就处于被抢先状态 创建状态 进程刚被创建 该进程存在 但既不是就绪状态 也不是睡眠状态 这个状态是除了进程0以外的所有进程的最初状态 僵死状态 zombie 进程调用exit结束 进程不再存在 但在进程表项中仍有记录 该记录可由父进程收集 现在我们从进程的创建到退出来看看进程的状态转化 需要说明的是 进程在它的生命周期里并不一定要经历所有的状态 进程状态可通过ps指令进行查看外 也可以通过写程序访问 proc目录下对应的进程ID目录下的状态文件检查进程运行状态 进程运行状态 线程与进程的区别互斥锁线程参数线程池进程打开的文件描述字个数线程安全函数 多线程编程 DNSDHCPPPPOEB S与C S架构常用网络传输协议RPC SOAP负载均衡热备 网络基本概念 DNS是域名系统 DomainNameSystem 的缩写 该系统用于命名组织到域层次结构中的计算机和网络服务 在Internet上域名与IP地址之间是一对一 或者一对多 的 域名虽然便于人们记忆 但机器之间只能互相认识IP地址 它们之间的转换工作称为域名解析 域名解析需要由专门的域名解析服务器来完成 DNS就是进行域名解析的服务器 DNS命名用于Internet等TCP IP网络中 通过用户友好的名称查找计算机和服务 当用户在应用程序中输入DNS名称时 DNS服务可以将此名称解析为与之相关的其他信息 如IP地址 因为 你在上网时输入的网址 是通过域名解析系统解析找到了相对应的IP地址 这样才能上网 其实 域名的最终指向是IP 或使用nslookup 网络基本概念 DNS DHCP是DynamicHostConfigurationProtocol 动态主机分配协议 缩写 它的前身是BOOTP DHCP的分配形式首先 必须至少有一台DHCP服务工作在网络上面 它会监听网络的DHCP请求 并与客户端磋商TCP IP的设定环境 它提供三种IP定位方式 ManualAllocation 手动分配 网络管理员为某些少数特定的Host绑定固定IP地址 且地址不会过期AutomaticAllocation 自动分配 自动分配 其情形是 一旦DHCP客户端第一次成功的从DHCP服务器端租用到IP地址之后 就永远使用这个地址 DynamicAllocation 动态分配 动态分配 当DHCP第一次从DHCP服务器端租用到IP地址之后 并非永久的使用该地址 只要租约到期 客户端就得释放 release 这个IP地址 以给其它工作站使用 网络基本概念 DHCP pppoe是point to pointprotocoloverethernet的简称 可以使以太网的主机通过一个简单的桥接设备连到一个远端的接入集中器上 通过pppoe协议 远端接入设备能够实现对每个接入用户的控制和计费 与传统的接入方式相比 pppoe具有较高的性能价格比 它在包括小区组网建设等一系列应用中被广泛采用 目前流行的宽带接入方式adsl就使用了pppoe协议 网络基本概念 PPPOE RPC 为远程过程调用 RemoteProcedureCallProtocol XMLRPC 为基于XML格式的RPCSOAP 简单对象访问协议 SimpleObjectAccessProtocol 简单对象访问协议 SOAP 是一种轻量的 简单的 基于XML的协议 它被设计成在WEB上交换结构化的和固化的信息 SOAP可以和现存的许多因特网协议和格式结合使用 包括超文本传输协议 HTTP 简单邮件传输协议 SMTP 多用途网际邮件扩充协议 MIME 它还支持从消息系统到远程过程调用 RPC 等大量的应用程序 网络基本概念 RPC B S架构 Browser Server 浏览器 服务器模式 是WEB兴起后的一种网络结构模式 WEB浏览器是客户端最主要的应用软件 这种模式统一了客户端 将系统功能实现的核心部分集中到服务器上 简化了系统的开发 维护和使用 C S架构 Client Server或客户 服务器模式 Client和Server常常分别处在相距很远的两台计算机上 Client程序的任务是将用户的要求提交给Server程序 再将Server程序返回的结果以特定的形式显示给用户 Server程序的任务是接收客户程序提出的服务请求 进行相应的处理 再将结果返回给客户程序 网络基本概念 B S与C S FTP 文件传输协议 filetransferprotocol SMTP 简单邮件传输协议 Simplemailtransferprotocol POP3 邮局协议 Postofficeprotocol3 HTTP 超文件传输协议 HyperTextTransferProtocol SIP 会话初始化协议 Sessioninitiationprotocol RTSP 实时流传输协议 RealTimeStreamingProtocol SNMP 简单网络管理协议 Simplenetworkmanagementprotocol P2P 点对点 PeertoPeer 常用网络传输协议 常用函数介绍网络编程中的常见问题 网络编程 ConnectBindCreateRecvSendSendtoGethostbynameInet addrHtonlInet ntop 网络编程的常用函数 1 T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论