| .TH 9P-FID 3 |
| .SH NAME |
| Fid, Fidpool, allocfidpool, freefidpool, allocfid, closefid, lookupfid, removefid, |
| Req, Reqpool, allocreqpool, freereqpool, allocreq, closereq, lookupreq, removereq \- 9P fid, request tracking |
| .SH SYNOPSIS |
| .ft L |
| .nf |
| #include <u.h> |
| #include <libc.h> |
| #include <fcall.h> |
| #include <thread.h> |
| #include <9p.h> |
| .fi |
| .PP |
| .ft L |
| .nf |
| .ta \w'\fL 'u +\w'\fLulong 'u |
| typedef struct Fid |
| { |
| ulong fid; |
| char omode; /* -1 if not open */ |
| char *uid; |
| Qid qid; |
| File *file; |
| void *aux; |
| \fI...\fP |
| } Fid; |
| .fi |
| .PP |
| .ft L |
| .nf |
| .ta \w'\fL 'u +\w'\fLulong 'u |
| typedef struct Req |
| { |
| ulong tag; |
| Fcall ifcall; |
| Fcall ofcall; |
| Req *oldreq; |
| void *aux; |
| \fI...\fP |
| } Req; |
| .fi |
| .PP |
| .ft L |
| .nf |
| .ta \w'\fLFidpool* 'u |
| Fidpool* allocfidpool(void (*destroy)(Fid*)) |
| void freefidpool(Fidpool *p) |
| Fid* allocfid(Fidpool *p, ulong fid) |
| Fid* lookupfid(Fidpool *p, ulong fid) |
| void closefid(Fid *f) |
| void removefid(Fid *f) |
| .fi |
| .PP |
| .ft L |
| .nf |
| .ta \w'\fLReqpool* 'u |
| Reqpool* allocreqpool(void (*destroy)(Req*)) |
| void freereqpool(Reqpool *p) |
| Req* allocreq(Reqpool *p, ulong tag) |
| Req* lookupreq(Reqpool *p, ulong tag) |
| void closereq(Req *f) |
| void removereq(Req *r) |
| .fi |
| .SH DESCRIPTION |
| These routines provide management of |
| .B Fid |
| and |
| .B Req |
| structures from |
| .BR Fidpool s |
| and |
| .BR Reqpool s. |
| They are primarily used by the 9P server loop |
| described in |
| .IR 9p (3). |
| .PP |
| .B Fid |
| structures are intended to represent |
| active fids in a 9P connection, as |
| .B Chan |
| structures do in the Plan 9 kernel. |
| The |
| .B fid |
| element is the integer fid used in the 9P |
| connection. |
| .B Omode |
| is the mode under which the fid was opened, or |
| .B -1 |
| if this fid has not been opened yet. |
| Note that in addition to the values |
| .BR OREAD , |
| .BR OWRITE , |
| and |
| .BR ORDWR , |
| .B omode |
| can contain the various flags permissible in |
| an open call. |
| To ignore the flags, use |
| .BR omode&OMASK . |
| .B Omode |
| should not be changed by the client. |
| The fid derives from a successful authentication by |
| .BR uid . |
| .B Qid |
| contains the qid returned in the last successful |
| .B walk |
| or |
| .B create |
| transaction involving the fid. |
| In a file tree-based server, the |
| .BR Fid 's |
| .B file |
| element points at a |
| .B File |
| structure |
| (see |
| .IR 9p-file (3)) |
| corresponding to the fid. |
| The |
| .B aux |
| member is intended for use by the |
| client to hold information specific to a particular |
| .BR Fid . |
| With the exception of |
| .BR aux , |
| these elements should be treated |
| as read-only by the client. |
| .PP |
| .I Allocfidpool |
| creates a new |
| .BR Fidpool . |
| .I Freefidpool |
| destroys such a pool. |
| .I Allocfid |
| returns a new |
| .B Fid |
| whose fid number is |
| .IR fid . |
| There must not already be an extant |
| .B Fid |
| with that number in the pool. |
| Once a |
| .B Fid |
| has been allocated, it can be looked up by |
| fid number using |
| .IR lookupfid . |
| .BR Fid s |
| are reference counted: both |
| .I allocfid |
| and |
| .I lookupfid |
| increment the reference count on the |
| .B Fid |
| structure before |
| returning. |
| When a reference to a |
| .B Fid |
| is no longer needed, |
| .I closefid |
| should be called to note the destruction of the reference. |
| When the last reference to a |
| .B Fid |
| is removed, if |
| .I destroy |
| (supplied when creating the fid pool) |
| is not zero, it is called with the |
| .B Fid |
| as a parameter. |
| It should perform whatever cleanup is necessary |
| regarding the |
| .B aux |
| element. |
| .I Removefid |
| is equivalent to |
| .I closefid |
| but also removes the |
| .B Fid |
| from the pool. |
| Note that due to lingering references, |
| the return of |
| .I removefid |
| may not mean that |
| .I destroy |
| has been called. |
| .PP |
| .IR Allocreqpool , |
| .IR freereqpool , |
| .IR allocreq , |
| .IR lookupreq , |
| .IR closereq , |
| and |
| .I removereq |
| are analogous but |
| operate on |
| .BR Reqpool s |
| and |
| .B Req |
| structures. |
| .SH SOURCE |
| .B \*9/src/lib9p |
| .SH SEE ALSO |
| .IR 9p (3), |
| .IR 9p-file (3) |