- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TCPIP實验指导书
1.Linux文件IO基础API的使用1.1文件IO基础APIopenclosereadwritelseek1.2 基础文件IO操作流程1.2.1 打开将要进行读或写的磁盘文件如果要对一个文件进行操作,不管是读或者是写,首先需要将一个保存于磁盘的文件打开,并将文件数据装入内存中。在Linux中,使用open系统调用完成对一个磁盘文件的打开工作。文件定位在Linux系统中,用户通过文件路径告知操作系统所需要操作文件在文件目录树中的位置。例如:”/etc/passwd”这个文件路径,其是一个绝对路径,也就是从文件目录树的根开始的。对于该路径中包含了以下4个部分: “ /” :表示文件目录树的根目录; “etc” :表示根目录下的一个名为etc的子目录;“ /” :用来分隔不同层次的目录或文件名的分隔符号;“passwd”:表示etc子目录中的一个文件passwd;应当注意的是,这个文件路径只是用户层次的路径,要真正找到并打开磁盘中对应的文件数据,Linux操作系统还需要做很多工作。但这些工作对于用户而言是透明的,用户只需通过调用系统提供的系统调用open时,为open提供所要操作的文件的路径字符串即可。即为open提供第一个参数的具体值。操作方式设定在提供了要操作文件的文件路径给open系统调用之外,还需要告知系统,用户将要如何操作该文件;如果文件路径不存在,系统应该如何处理;如果创建一个文件,是否用户有特殊的权限设定;如果文件存在,那么向该文件写数据是覆盖还是追加等等。保存文件描述符利用open成功打开一个文件后,open系统调用会返回系统生成的一个该文件的文件描述符,而该文件描述符是之后操作给文件最重要的一个依据,所以在编写程序时,应该声明一个变量保存该文件描述符,以便之后对该文件的操作。1.2.2 读取文件中的数据对已打开的文件进行读操作,可以调用read系统调用。在使用read系统调用时,需要首先准备足够大的缓冲区,特别是要读取完整的文件数据时。例如,我们希望读取路径/etc/passwd所指定的文件内容时,可以编写以下程序段来保证该文件数据最终被读入到应用程序内存空间中。...//此处处理读出的文件数据...1.2.3 向文件中写入数据在上一节中给出的代码完成了打开文件/etc/passwd,并将该文件中的数据读入到缓冲区buffer_read中的工作。而在本节中,下面给出的代码将打开文件/tmp/passwd,如果该文件不存在就创建该文件,如果该文件存在,那么就以覆盖的方式向文件中写入新数据。然后,将前面读取出来/etc/passwd文件的内容写入到/tmp/passwd文件中。...//关闭文件...1.2.4 关闭文件前面程序完成了读取/etc/passwd文件的内容,并将其写入到/tmp/passwd文件中。在完成了对文件的操作后,需要将打开的文件进行关闭。...2 基于TCP的客户端与服务器设计流程2.1 基于TCP的服务器TCP是面向连接的传输层协议,因此服务器通常情况下是被动等待客户程序的连接请求的到来,然后与该客户程序建立连接,并为客户程序提供相应服务。2.1.1 设计流程基本描述建立服务器端本地套接字对象;为本地套接字绑定套接字地址;利用本地套接字监听网络,换句话来讲就是被动等待服务请求的到来;接受一个客户的连接请求,建立连接;响应客户请求,为客户提供服务;完成服务后,客户无需继续服务时断开连接,并返回3。2.1.2 所涉及的函数与数据结构2.1.2.1 socket函数domain参数:type参数:protocol参数:IPPROTO_TCP:TCP传输协议IPPROTO_UDP:UDP传输协议IPPROTO_SCTP:SCTP传输协议返回值:执行成功,函数返回一个非负整数值,该值作为所创建的套接字对象的描述符sockfd,类似于文件间描述符;执行出错,函数返回-1;简要说明domain和type两个一般就可以确定一种协议:AF_INET 和 SOCK_STREAM 可以确定 IPv4和TCP协议AF_INET6 和 SOCK_STREAM 可以确定 IPv6 和 TCP协议AF_INET 和 SOCK_DGRAM 可以确定 IPv4 和 UDP协议AF_INET6 和 SOCK_DGRAM 可以确定 IPv6 和 UDP协议如果默认使用由domain和type共同决定的协议时,protocol参数取值可以为0。2.1.2.2 IPv4套接字地址#include netinet/in.hstruct in_addr { in_addr_t s_addr; /* 32-bit IPv4 address */ /* network byte ordered */};struct
文档评论(0)