9pfid 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. .TH 9PFID 2
  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. .IR 9p (2).
  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. .IR 9pfile (2))
  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 /sys/src/lib9p
  202. .SH SEE ALSO
  203. .IR 9p (2),
  204. .IR 9pfile (2)