1.OPEN请求报文和应答报文中的数据
OPEN操作比较复杂,涉及到很多种特殊情况。按照RFC3530的规定,OPEN请求报文中需要包含下列数据:
struct OPEN4args {
seqid4 seqid; // 这是一个序号,保证请求能够序列化.
uint32_t share_access; // 这是用户请求的访问权限
uint32_t share_deny; // 一定不能有这些权限,Linux中固定设置为0.
open_owner4 owner; // clientid + 这次OPEN操作的名称.
openflag4 openhow; // 有两个取值:OPEN4_NOCREATE和OPEN4_CREATE
open_claim4 claim; // 有四个取值:CLAIM_NULL、CLAIM_PREVIOUS、CLAIM_DELEGATE_CUR、CLAIM_DELEGATE_PREV
};
owner包含两个字段:clientid和这次操作的名称, 服务器端可以根据clientid和OPEN操作的名称查找是否已经保存了这次操作的信息。seqid是OPEN操作的序号,保证多个OPEN操作序列化执行。share_access是用户打开文件时请求的访问权限,share_deny是为Windows share reservation设置的字段,Linux系统中这个字段固定为0。openhow表示如果文件不存在是否创建一个新文件。claim表示OPEN类型,按照按照claim值不同,OPEN操作分为四种类型。这篇文>章中,我们只讲解最常见的一种情况:打开服务器端存在的一个文件。这种请求中claim的类型是CLAIM_NULL。这种情况下,open_claim4中还包含了文件的名>称,这是我们要打开的文件。
按照RFC3530的规定,OPEN操作应答报文包含下列内容
struct OPEN4resok {
stateid4 stateid; /* Stateid for open */
change_info4