您的位置:首页 > 运维架构 > Linux

《Unix-Linux编程实践教程》读书笔记(十一)

2014-06-05 23:26 197 查看
第十一章 连接到近端或远端的进程:服务器与Socket(套接字)

1.      产品和服务的概念

2.      一个简单的比喻:饮料机接口

         提供一个接口,合成不同口味的饮料。这类似于Unix提供一个接口来处理来自不同数据源的数据。4种数据源:磁盘文件;设备;管道;Socket

3.      unix中使用的计算器:bc

         1)  bc与dc构成的客户/服务模型;双向的通信;永久服务(区别于shell中fork+exec每次开一个新的进程执行一条新的命令,bc让单一的dc处于运行状态来进行数据处理)

         2)  编写bc:使用pipe、fork、dup、exec

                   在这个程序中,似乎没有看到程序的出口。

4.      协同进程的讨论:什么样的两个进程可以成为协同进程

5.      fdopen:让文件描述符像文件一样使用(其实文件描述符和FILE*文件可以相互转化)

6.      popen:让进程看似文件(popen将上述pipe、fork、dup、exec等函数封装在一起,使得对程序和文件的操作统一)

         1)  fopen打开一个指向文件的带缓存的链接FILE*;

         2)  popen打开一个指向进程的带缓冲的链接;

         3)  popen第一个参数是要执行的命令,可以使任何shell命令,第二个参数是“r”或者“w”,不能是“a”,popen要用pclose关闭。

7.      popen的实现:使用fdopen命令

         1)  popen运行一个程序并返回指向该程序的标准输入或标准输出的连接;

         2)  使用上述pipe、fork、dup、exec等函数实现popen

8.      访问数据:文件,应用程序接口(API)和服务器

         1)  文件:open、read

         2)  直接封装好的API

         3)  从进程获取数据:popen

9.      Socket:与远端进程相连

         管道的两个缺陷:管道在一个进程中被创建,通过fork实现共享。因此管道只能连接相关的进程,且只能连接在一台机器上的进程。Socket允许连接不相关的进程,且允许连接不同计算机上的进程。

1)   类比:电话报时服务流程

2)   因特网时间、DAP和天气服务器

3)   服务列表:众所周知的端口

4)   编写timeserv.c:时间服务器(类比电话报时服务流程,涉及的函数)

socket、bind、listen、accep(阻塞进程知道有请求)、向accept返回的文件描述符写入应答数据、close关闭该文件描述符

5)   编写timeclnt.c:时间服务客户端

socket、connect(成功返回0,说明sockid是一个合法的文件描述符)、readsockid

10.   另一种服务器:远程的ls(打印远程主机上目录列表的程序,重点是协议)

11.   软件精灵(开机后台运行的服务器程序)

12.   小结

         1)  一些程序被作为单独的进程建立起来来接收和发送数据,在客户/服务模型中,服务器进程为客户提供数据处理或数据服务

         2)  客户/服务器系统包含通信系统和协议。客户和服务器通过管道或socket进行通信。协议时绘画过程中一些列规则的集合。

         3)popen函数将程序像文件一样来访问

         4)  管道是一对相互连接的文件描述符。socket是一个未连接的通信端点,通过fdopen还可以变为一个潜在的文件描述符。客户通过把自己的socket和服务器端的socket相连接来创建一个通信连接

         5)  socket的标识:机器地址和端口号

         6)  文件描述符提供了与文件、设备、其他进程的统一的编程接口

----------------------------------------------------------------------------------------

本文链接http://blog.csdn.net/yongchurui/article/details/28728977

2014.06.05
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息