⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc1094.txt

📁 很多RFC的中文文档
💻 TXT
📖 第 1 页 / 共 3 页
字号:
 
  在"to.dir"目录中创建文件"to.name",它是已存在的文件"from"的一个硬链接。如果返回值是NFS_OK,一个链接创立。如何返回其它的值表明出错,这个链接没有创建。

   硬链接应该具有这样的属性,链接的文件中的任何一个改变都将影响到两个文件。当硬链接指向一个文件的时候,文件属性中应该有一个表示"nlink"的值,这个值比链接前大。

  注意:可能不是幂等地操作。

2.2.14   创建符号链接
           
struct symlinkargs {
                   diropargs from;
                   path to;
                   sattr attributes;
           };
 
           stat     NFSPROC_SYMLINK(symlinkargs) = 13;
 
   在给定的目录"from.dir"中创建一个文件类型是NFLNK的文件"from.name"。这个新文件包含着路径名 "to",具有"attributes"指定的初始属性。如果返回值是NFS_OK,一个链接被创建。任何其它的返回值指示错误,链接没有创建。

   符号链接是指向另一个文件的指针。在"to"中给定的名字不被服务器解释,只存储在新建的文件中。当客户端引用一个符号链接文件的时候,符号链接中的内容通常作为一个代替的路径名重新被解释。READLINK的操作返回给客户端要解释的数据。
 
   注意:在UNIX服务器上,attributes从不使用,因为符号链接总是具有0777的模式。
 
2.2.15  创建目录
 
           diropres      NFSPROC_MKDIR (createargs) = 14;
 
   新目录"where.name"创建在给定的目录"where.dir"中。新目录的初始属性由"attributes"确定。一个NFS_OK的返回值表示新目录被创建,响应"file"和响应"attributes"是这个新目录的文件句柄和属性。返回任何其它的响应状态"status"都意味着操作失败,没有目录被创建。
 
   注意:可能不是幂等地操作。
 
2.2.16  删除目录
           
stat       NFSPROC_RMDIR(diropargs) = 15;

   在"dir"指定的目录中的空的目录"name"将被删除,如果响应是NFS_OK,目录被删除。
 
  注意:可能不是幂等地操作。

2.2.17  从目录中读
 
           struct readdirargs {
                   fhandle dir;
                   nfscookie cookie;
                   unsigned count;
           };
 
           struct entry {
                   unsigned fileid;
                   filename name;
                   nfscookie cookie;
                   entry *nextentry;
           };
 
           union readdirres switch (stat status) {
           case NFS_OK:
                   struct {
                           entry *entries;
                           bool eof;
                   } readdirok;
           default:
                   void;
           };
 
           readdirres     NFSPROC_READDIR (readdirargs) = 16;
 
  从 "dir"指定的目录中返回一个可变数目的目录项集合,总的大小是 "count"个字节。如果返回的状态值"status"是NFS_OK,那么后跟一组可变数目的"entry"。每一个"entry"包含着一个"fileid",这个"fileid"是由文件系统中唯一标识这个文件的号码,文件名和一个指向目录中下一个目录项的不透明指针"cookie"组成。Cookie使用在下面的READDIR调用中,以便在这个目录中从一个指定的开始点获得更多的目录项。特殊的cookie值0(所有比特都是0)使得从目录的开始点得到目录项。"fileid"字段应该和在文件属性中的"fileid"字段中有同样的值。(见“基本数据类型”中的2.3.5节“fattr” ) 如果在目录中没有更多的目录项,"eof"标志的值是TRUE。

2.2.18  获得文件系统属性

           union statfsres (stat status) {
           case NFS_OK:
               struct {
                   unsigned tsize;
                   unsigned bsize;
                   unsigned blocks;
                   unsigned bfree;
                   unsigned bavail;
               } info;
           default:
                   void;
           };
 
           statfsres    NFSPROC_STATFS(fhandle) = 17;
 
   如果响应状态"status"是NFS_OK,那么响应"info"给出包含着由输入文件句柄fhandle引用的文件的文件系统的属性。属性字段包含着下列值:
 
      tsize   用字节表示的最优化的传输尺寸。这是服务器在READ 和 WRITE请求中的
最想要的数据字节数。
 
bsize   文件系统用字节表示的块尺寸。.
 
blocks  文件系统中 "bsize"块的总数。
         
bfree   文件系统中自由的“bsize”块的数目。
         
      bavail   无特权用户可用的"bsize"块的数目。
 
   注意:如果文件系统具有可变尺寸的块,这个调用不能很好的工作。

2.3  基本数据类型
   以下XDR定义是在描述其它结构中使用的基本的结构和类型。
 
2.3.1.  stat(统计类型)
    
       enum stat {
           NFS_OK = 0,
           NFSERR_PERM=1,
           NFSERR_NOENT=2,
           NFSERR_IO=5,
           NFSERR_NXIO=6,
           NFSERR_ACCES=13,
           NFSERR_EXIST=17,
           NFSERR_NODEV=19,
           NFSERR_NOTDIR=20,
           NFSERR_ISDIR=21,
           NFSERR_FBIG=27,
           NFSERR_NOSPC=28,
           NFSERR_ROFS=30,
           NFSERR_NAMETOOLONG=63,
           NFSERR_NOTEMPTY=66,
           NFSERR_DQUOT=69,
           NFSERR_STALE=70,
           NFSERR_WFLUSH=99
       };
 
   在每一个过程调用结果中都有统计类型 "stat"被返回。NFS_OK的值表示调用执行成功,结果有效。其它值表示服务器一侧在过程服务中产生的某种错误。这些错误值来源于UNIX错误号。
 
   NFSERR_PERM
不是所有者,调用者不是所请求操作的正确的所有者。
 
   NFSERR_NOENT
不存在这样的文件或者目录。指定的文件或者目录不存在。
 
   NFSERR_IO
在操作执行的时候出现某种硬件错误。例如,这可能是一个磁盘错误。
 
   NFSERR_NXIO
没有这样的设备或者地址。
 
   NFSERR_ACCES
许可权限拒绝。调用者没有执行请求操作的正确的权限。
 
   NFSERR_EXIST
文件存在。指定的文件已经存在。
 
   NFSERR_NODEV
没有这样的设备。

  NFSERR_NOTDIR
不是一个目录。在目录操作中调用者指定一个非目录。
 
   NFSERR_ISDIR
是一个目录。调用者在一个非目录操作中指定一个目录。
 
   NFSERR_FBIG
文件太大。操作造成文件增长超过服务器的限制。
 
   NFSERR_NOSPC
在设备上没有剩余的空间。这个操作导致服务器文件系统达到它的极限。
 
   NFSERR_ROFS
只读文件系统。在一个只读文件系统上试图写。
 
   NFSERR_NAMETOOLONG
文件名太长。在操作中文件名太长。
 
   NFSERR_NOTEMPTY
目录不空。试图删除一个不空的目录。
 
   NFSERR_DQUOT
磁盘限额超出。客户在服务器上的磁盘限额已经超出。
 
   NFSERR_STALE
在参数中给的文件句柄"fhandle"无效。也就是说,这个文件句柄引用的文件不再存在。
或者访问它的设置已经被撤销。
 
   NFSERR_WFLUSH
使用"WRITECACHE"调用中的服务器写缓冲区得到磁盘刷新。

2.3.2.  ftype(文件类型)
 
          enum ftype {
              NFNON = 0,
              NFREG = 1,
              NFDIR = 2,
              NFBLK = 3,
              NFCHR = 4,
              NFLNK = 5
          };
 
枚举"ftype"类型给出文件的类型。NFNON类型表示不是一个文件,NFREG表示一个正常的文件, NFDIR表示一个目录。NFBLK表示一个特定的块设备, NFCHR表示一个特定的字符设备,NFLNK表示一个符号链接。
 
2.3.3.  fhandle(文件句柄)

          typedef opaque fhandle[FHSIZE];
 
"fhandle"是一个在服务器和客户端之间传送的文件句柄。所有文件操作都使用文件句柄来引用一个文件或者目录。文件句柄包含着服务器需要的区分一个单独文件的信息。
 
2.3.4.  timeval(时间值)
        
  struct timeval {
              unsigned int seconds;
              unsigned int useconds;
          };
 
"timeval"结构是一个秒和微秒的数值,从格林威治时间1970年一月一日凌晨起计时。它使用在传递时间和日期的信息中。
 
2.3.5.  fattr(文件属性)
 
          struct fattr {
              ftype        type;
              unsigned int mode;
              unsigned int nlink;
              unsigned int uid;
              unsigned int gid;
              unsigned int size;
              unsigned int blocksize;
              unsigned int rdev;
unsigned int blocks;
              unsigned int fsid;
              unsigned int fileid;
              timeval      atime;
              timeval      mtime;
              timeval      ctime;
          };
 
"fattr"结构包含着文件的属性; "type"是文件的类型;"nlink"是一个文件的硬链接数(对同一个文件不同的名字的数目); "uid"是这个文件的所有者的用户标识号码; "gid"是拥有这个文件的组的组标识号码; "size"是这个文件以字节数计算的大小;"blocksize"是这个文件的一个块以字节计数的大小;如果文件的类型是NFCHR 或者 NFBLK,"rdev"是这个文件的设备号; "blocks"是文件在磁盘上块的数量;"fsid"是包含这个文件的文件系统的系统标识符; "fileid"是这个文件在它的文件系统中唯一的标识符号码; "atime"是上次文件读访问或者写访问的时间; "mtime"是文件数据上次被修改时的时间(写); "ctime"是文件状态上次改变的时间。如果文件的尺寸改变,写一个文件也将改变"ctime"。

"Mode"是被编码成一个比特集合的访问模式。注意文件类型要么在模式比特中指定,要么在文件类型中指定。这实际上是此协议中的一个缺陷,将在未来的版本中修订。下面的描述使用八进制数确定比特的位置
 
0040000这是一个目录,"type"字段应该是NFDIR。
 0020000 这是一个字符特殊文件,"type"字段应该是NFCHR。
      0060000这是一个块特殊文件,"type"字段应该是NFBLK。
0100000这是一个正常的文件,"type"字段应该是NFREG。
      0120000这是一个符号链接文件,"type"字段应该是NFLNK。
0140000这是一个命名的socket;"type"字段应该是NFNON。
      0004000设置在执行中的用户ID
      0002000 设置在执行中的组ID
      0001000 在使用后保存交换文本。
      0000400 对所有者的读权限许可。
      0000200 对所有者的写权限许可。
      0000100 对所有者的执行和搜索权限许可。
      0000040 对组的读权限许可。
      0000020 对组的写权限许可。
0000010 对组的执行和搜索权限许可。
0000004 对其他人的读权限许可。
0000002 对其他人的写权限许可。
0000001 对其他人的执行和搜索权限许可。
 
注意:这些比特与UNIX中stat(2)系统调用中返回的模式比特是一样的。文件类型要
么在模式比特中要么在文件类型中确定。这在未来的版本中将修改。
 
在属性结构中"rdev"字段是一个操作系统特定设备的标识符。在这个协议的下一个
修订版中将删除。

2.3.6.  sattr(设置文件属性)
 
          struct sattr {
              unsigned int mode;
              unsigned int uid;
              unsigned int gid;
              unsigned int size;
              timeval      atime;
              timeval      mtime;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -