linux环境编程系统培训讲义

上传人:bin****86 文档编号:57291352 上传时间:2018-10-20 格式:PPT 页数:32 大小:91.50KB
返回 下载 相关 举报
linux环境编程系统培训讲义_第1页
第1页 / 共32页
linux环境编程系统培训讲义_第2页
第2页 / 共32页
linux环境编程系统培训讲义_第3页
第3页 / 共32页
linux环境编程系统培训讲义_第4页
第4页 / 共32页
linux环境编程系统培训讲义_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《linux环境编程系统培训讲义》由会员分享,可在线阅读,更多相关《linux环境编程系统培训讲义(32页珍藏版)》请在金锄头文库上搜索。

1、LINUX环境编程系统培训,2009-10-10,目录,文件编程 多进程编程和进程控制 多线程编程 网络基本概念 网络编程 嵌入式数据库编程 其它技巧及常用软件 系统架构,文件IO与标准IO的区别 文件共享 原子操作 文件记录锁 IO的效率 进程打开的文件描述字个数 几个常用的函数,文件和目录操作,大多数U N I X文件I / O只需用到5个函数:o p e n、r e a d、w r i t e、lseek 以及c l o s e。然后说明不同缓存器长度对re a d和w r i t e函数的影响。 上面这些函数经常被称之为不带缓存的I / O(u n b u ffered I/O,不带缓

2、存-指的是每个r e a d和w r i t e都调用内核中的一个系统调用。 这些不带缓存的I / O函数不是ANSI C的组成部分,但是是P O S I X . 1和X P G 3的组成部分。 标准I / O提供缓存,目其的是尽可能减少使用r e a d和w r i t e调用的数量,它也对每个I / O流自动地进行缓存管理,避免了应用程序需要考虑这一点所带来的麻烦。不幸的是,标准I / O库令人最感迷惑的也是它的缓存。标准I/O有三种缓存类型:全缓存,行缓存,不缓存。 (1)我们可以通过buffersize.c程序来测试缓存的大小。 (2)我们可以通过iofork.c程序来测试缓存给我们带

3、来的困扰 (3)我们可以通过bufferio.c和fileio.c程序来测试文件I/O和标准I/O的区别,文件I/O与标准I/O的区别,在例fileshare.c中,我们在两个进程中对同一个文件写入,会发现后一次的写入会覆盖前一次的写入,我们可以作这样的改进:在每次写入之前我们先定位到文件结尾,再写入: if (lseek(fd, 0L, SEEK_END) 0) /*position to EOF*/printf(“lseek error:%sn“, strerror(errno); if (write(fd, buff, 100) != 100) /*and write*/printf(“

4、write error:%sn“, strerror(errno); 这样看起来似乎没有问题,但是实际操作的时候却有可能在执行第一句时被中断,然后由另一进程执行,再切换回来的时候仍然会覆盖另一进程写入的结果。,文件共享,上面的问题出在逻辑操作“定位档到文件尾端处,然后写”使用了两个分开的函数调用。 解决问题的方法是使这两个操作对于其他进程而言成为一个原子操作。任何一个要求多于1个函数调用的操作都不能成为原子操作,因为在两个函数调用之间,内核有可能会临时挂起该进程。 LI N U X 提供了一种方法使这种操作成为原子操作,其方法就是在打开文件时设置O_APPEND标志。另外,我们在创建文件的时候

5、,如果先判断某个文件是否存在,若不存在,则创建它,如果在打开和创建之间,另一个进程创建了该文件,那么就会发生问题。如果在这两个函数调用之间,另一个进程创建了该文件,而且又向该文件写进了一些数据,那么执行这段程序中的c r e a t 时,刚写上去的数据就会被擦去,前面讲的open时使用O_EXCL便可解决这个问题。 一般而言,原子操作(atomic operation)指的是由多步组成的操作。如果该操作原子地执行,则或者执行完所有步,或者一步也不执行,不可能只执行所有步的一个子集。,文件I/O中的原子操作,当两个人同时编辑一个文件时,其后果将如何呢?在很多U N I X系统中,该文件的最后状态

6、取决于写该文件的最后一个进程。但是对于有些应用程序,例如数据库,有时进程需要确保它正在单独写一个文件。我们引进记录锁的概念。 记录锁(record locking)的功能是:一个进程正在读或修改文件的某个部分时,可以阻止其他进程修改同一文件区。 文件记录锁操作通过fcntl函数实现,当fcntl的cmd是F_GETLK、F_SETLK或F_SETLKW。第三个参数是一个指向flock结构的指针。 例子见lockfile.c,文件记录锁,在有些情况下,我们从文件中读写数据时并不只能简单的实现访问文件的功能,而要考虑访问的速度,如视频存储录像,文件上传服务。 文件访问的速度与I/O的缓冲大小有关系

7、,与访问的次数也有关系 ,也当然与存储的媒体介质类型有关系,如USB接口的移动硬盘与IDE接口的硬盘读写速度便不一样。我们可以通过代码进行测试在多大缓冲时写入的速度最快。,I/O的效率,access : access函数实现按实际用户I D和实际组I D进行存取许可权测试的功能。 stat: stat函数返回一个与此命名文件有关的信息结构, fstat函数获得已在描述符 filedes上打开的文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。 opendir:打开一个目录进行访问 readdi

8、r:读目录 link:创建一个文件的硬链接 unlink:删除一个文件,另几个常用的函数,vfork与fork的区别 exec与system的区别 wait与waitpid 信号处理 进程间通讯 进程运行状态,多进程编程,(1) vfork用于创建一个新进程,而该新进程的目的是exec一个新程序。程序。vfork与fork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec (或exit),于是也就不会存访该地址空间。不过在子进程调用exec或exit之前,它在父进程的空间中运行。这种工作方式在某些UNIX的页式虚存实现中提高了效率。 (2) vf

9、ork和fork之间的另一个区别是: vfork保证子进程先运行,在它调用exec或exit之后父进程才可能被调度运行。(如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。),vfork与fork的区别,system在其实现中调用了fork、exec和waitpid,因此有三种返回值: (1) 如果f o r k失败或者w a i t p i d返回除E I N T R之外的出错,则system返回1,而且e r r n o中设置了错误类型。 (2) 如果exec失败(表示不能执行shell),则其返回值如同shell执行了exit (127)一样。 (3) 否则所有三个函

10、数(fork, exec和waitpid )都成功,并且system的返回值是shell的终止状态。exec (1) 当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其main函数开始执行。 (2) 因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。,exec与system的区别,当一个进程正常或异常终止时,内核就向其父进程发送S I G C H L D信号。因为子进程终止是个异步事件(这可以在父进程运行的任何时候发生),所以这种信号也是内核向父进程发的异步通知。父进程可以忽略该信号,或者提供一个该信号

11、发生时即被调用执行的函数(信号处理程序)。对于这种信号的系统默认动作是忽略它。可以通过wait和waitpid来实现守护进程,见daemon.c,wait与waitpid,我们的程序在运行中,经常可能会接收到各种信号,在遇到信号时,我们通常要么是忽略这个信号,要么是通过信号处理函数对此信号进行处理,如我们常忽略的信号:SIGPIPE,SIGCHLD,SIGHUP,我们常常也会对SIGTERM,SIGKILL及SIGINT等信号进行处理。信号也常被用在进程间通讯,如常用的两个信号:SIGUSR1和SIGUSR2,信号处理,进程间为什么需要通讯?进程间通讯的几种方式: 内存共享 管道 信号 SOC

12、KET,进程间通讯,用户状态:进程在用户状态下运行的状态。 内核状态:进程在内核状态下运行的状态。 内存中就绪:进程没有执行,但处于就绪状态,只要内核调度它,就可以执行。 内存中睡眠:进程正在睡眠并且进程存储在内存中,没有被交换到SWAP设备。 就绪且换出:进程处于就绪状态,但是必须把它换入内存,内核才能再次调度它运行。 睡眠且换出:进程正在睡眠,且被换出内存。 被抢先:进程从内核状态返回用户状态时,内核抢先于它做了上下文切换,调度了另一个进程。原先这个进程就处于被抢先状态。 创建状态:进程刚被创建。该进程存在,但既不是就绪状态,也不是睡眠状态。这个状态是除了进程0以外的所有进程的最初状态。

13、僵死状态(zombie):进程调用exit结束,进程不再存在,但在进程表项中仍有记录,该记录可由父进程收集。现在我们从进程的创建到退出来看看进程的状态转化。需要说明的是,进程在它的生命周期里并不一定要经历所有的状态。 进程状态可通过ps指令进行查看外,也可以通过写程序访问/proc目录下对应的进程ID目录下的状态文件检查进程运行状态,进程运行状态,线程与进程的区别 互斥锁 线程参数 线程池 进程打开的文件描述字个数 线程安全函数,多线程编程,DNS DHCP PPPOE B/S与C/S架构 常用网络传输协议 RPC、SOAP 负载均衡 热备,网络基本概念,DNS 是域名系统 (Domain N

14、ame System) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。在Internet上域名与IP地址之间是一对一(或者一对多)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。 DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网

15、。其实,域名的最终指向是IP。 dig 或使用nslookup,网络基本概念-DNS,DHCP 是 Dynamic Host Configuration Protocol(动态主机分配协议)缩写,它的前身是 BOOTP。DHCP 的分配形式 首先,必须至少有一台 DHCP 服务工作在网络上面,它会监听网络的 DHCP 请求,并与客户端磋商 TCP/IP 的设定环境。它提供三种 IP 定位方式: Manual Allocation(手动分配)网络管理员为某些少数特定的Host绑定固定IP地址,且地址不会过期Automatic Allocation (自动分配)自动分配,其情形是:一旦 DHCP

16、客户端第一次成功的从 DHCP 服务器端租用到 IP 地址之后,就永远使用这个地址。 Dynamic Allocation (动态分配) 动态分配,当 DHCP 第一次从 DHCP 服务器端租用到 IP 地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放(release)这个 IP 地址,以给其它工作站使用。,网络基本概念-DHCP,pppoe是point-to-point protocol over ethernet的简称,可以使以太网的主机通过一个简单的桥接设备连到一个远端的接入集中器上。通过pppoe协议,远端接入设备能够实现对每个接入用户的控制和计费。与传统的接入方式相比,p

17、ppoe具有较高的性能价格比,它在包括小区组网建设等一系列应用中被广泛采用,目前流行的宽带接入方式adsl就使用了pppoe协议。,网络基本概念-PPPOE,RPC:为远程过程调用(Remote Procedure Call Protocol) XMLRPC:为基于XML格式的RPC SOAP:简单对象访问协议(Simple Object Access Protocol)简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号