t9p-fid.3 - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       t9p-fid.3 (3631B)
       ---
            1 .TH 9P-FID 3
            2 .SH NAME
            3 Fid, Fidpool, allocfidpool, freefidpool, allocfid, closefid, lookupfid, removefid,
            4 Req, Reqpool, allocreqpool, freereqpool, allocreq, closereq, lookupreq, removereq \- 9P fid, request tracking
            5 .SH SYNOPSIS
            6 .ft L
            7 .nf
            8 #include <u.h>
            9 #include <libc.h>
           10 #include <fcall.h>
           11 #include <thread.h>
           12 #include <9p.h>
           13 .fi
           14 .PP
           15 .ft L
           16 .nf
           17 .ta \w'\fL    'u +\w'\fLulong 'u
           18 typedef struct Fid
           19 {
           20         ulong        fid;
           21         char        omode;  /* -1 if not open */
           22         char        *uid;
           23         Qid        qid;
           24         File        *file;
           25         void        *aux;
           26         \fI...\fP
           27 } Fid;
           28 .fi
           29 .PP
           30 .ft L
           31 .nf
           32 .ta \w'\fL    'u +\w'\fLulong 'u
           33 typedef struct Req
           34 {
           35         ulong        tag;
           36         Fcall        ifcall;
           37         Fcall        ofcall;
           38         Req        *oldreq;
           39         void        *aux;
           40         \fI...\fP
           41 } Req;
           42 .fi
           43 .PP
           44 .ft L
           45 .nf
           46 .ta \w'\fLFidpool* 'u
           47 Fidpool*        allocfidpool(void (*destroy)(Fid*))
           48 void        freefidpool(Fidpool *p)
           49 Fid*        allocfid(Fidpool *p, ulong fid)
           50 Fid*        lookupfid(Fidpool *p, ulong fid)
           51 void        closefid(Fid *f)
           52 void        removefid(Fid *f)
           53 .fi
           54 .PP
           55 .ft L
           56 .nf
           57 .ta \w'\fLReqpool* 'u
           58 Reqpool*        allocreqpool(void (*destroy)(Req*))
           59 void        freereqpool(Reqpool *p)
           60 Req*        allocreq(Reqpool *p, ulong tag)
           61 Req*        lookupreq(Reqpool *p, ulong tag)
           62 void        closereq(Req *f)
           63 void        removereq(Req *r)
           64 .fi
           65 .SH DESCRIPTION
           66 These routines provide management of 
           67 .B Fid
           68 and
           69 .B Req
           70 structures from 
           71 .BR Fidpool s
           72 and
           73 .BR Reqpool s.
           74 They are primarily used by the 9P server loop
           75 described in 
           76 .MR 9p (3) .
           77 .PP
           78 .B Fid
           79 structures are intended to represent
           80 active fids in a 9P connection, as 
           81 .B Chan
           82 structures do in the Plan 9 kernel.
           83 The
           84 .B fid
           85 element is the integer fid used in the 9P 
           86 connection.
           87 .B Omode
           88 is the mode under which the fid was opened, or 
           89 .B -1 
           90 if this fid has not been opened yet.
           91 Note that in addition to the values 
           92 .BR OREAD ,
           93 .BR OWRITE ,
           94 and
           95 .BR ORDWR ,
           96 .B omode
           97 can contain the various flags permissible in
           98 an open call.
           99 To ignore the flags, use
          100 .BR omode&OMASK .
          101 .B Omode
          102 should not be changed by the client.
          103 The fid derives from a successful authentication by
          104 .BR uid .
          105 .B Qid
          106 contains the qid returned in the last successful
          107 .B walk
          108 or
          109 .B create
          110 transaction involving the fid.
          111 In a file tree-based server, the 
          112 .BR Fid 's
          113 .B file
          114 element points at a
          115 .B File
          116 structure 
          117 (see
          118 .MR 9p-file (3) )
          119 corresponding to the fid.
          120 The
          121 .B aux
          122 member is intended for use by the
          123 client to hold information specific to a particular
          124 .BR Fid .
          125 With the exception of 
          126 .BR aux ,
          127 these elements should be treated
          128 as read-only by the client.
          129 .PP
          130 .I Allocfidpool
          131 creates a new 
          132 .BR Fidpool .
          133 .I Freefidpool
          134 destroys such a pool.
          135 .I Allocfid
          136 returns a new
          137 .B Fid
          138 whose fid number is
          139 .IR fid .
          140 There must not already be an extant
          141 .B Fid
          142 with that number in the pool.
          143 Once a 
          144 .B Fid
          145 has been allocated, it can be looked up by 
          146 fid number using
          147 .IR lookupfid .
          148 .BR Fid s
          149 are reference counted: both 
          150 .I allocfid
          151 and
          152 .I lookupfid
          153 increment the reference count on the 
          154 .B Fid
          155 structure before
          156 returning.
          157 When a reference to a 
          158 .B Fid
          159 is no longer needed, 
          160 .I closefid
          161 should be called to note the destruction of the reference.
          162 When the last reference to a 
          163 .B Fid
          164 is removed, if
          165 .I destroy
          166 (supplied when creating the fid pool)
          167 is not zero, it is called with the 
          168 .B Fid
          169 as a parameter.
          170 It should perform whatever cleanup is necessary
          171 regarding the
          172 .B aux
          173 element.
          174 .I Removefid
          175 is equivalent to
          176 .I closefid
          177 but also removes the
          178 .B Fid
          179 from the pool.
          180 Note that due to lingering references,
          181 the return of
          182 .I removefid
          183 may not mean that
          184 .I destroy
          185 has been called.
          186 .PP
          187 .IR Allocreqpool ,
          188 .IR freereqpool ,
          189 .IR allocreq ,
          190 .IR lookupreq ,
          191 .IR closereq ,
          192 and
          193 .I removereq
          194 are analogous but
          195 operate on 
          196 .BR Reqpool s
          197 and
          198 .B Req
          199 structures.
          200 .SH SOURCE
          201 .B \*9/src/lib9p
          202 .SH SEE ALSO
          203 .MR 9p (3) ,
          204 .MR 9p-file (3)