Home Man
Search
Today's Posts
Register

Linux & Unix Commands - Search Man Pages

Plan 9 - man page for fcall (plan9 section 2)

FCALL(2)			       System Calls Manual				 FCALL(2)

NAME
       Fcall,  convS2M, convD2M, convM2S, convM2D, getS, fcallconv, dirconv, dirmodeconv - inter-
       face to Plan 9 File protocol

SYNOPSIS
       #include <u.h>
       #include <libc.h>
       #include <auth.h>
       #include <fcall.h>

       int convS2M(Fcall *f, char *ap)

       int convD2M(Dir *d, char *ap)

       int convM2S(char *ap, Fcall *f, int n)

       int convM2D(char *ap, Dir *d)

       char *getS(int fd, char *ap, Fcall *f, long *lp)

       int dirconv(void *o, Fconv*)

       int fcallconv(void *o, Fconv*)

       int dirmodeconv(void *o, Fconv*)

DESCRIPTION
       These routines convert messages in the machine-independent format of the Plan 9 file  pro-
       tocol, 9P, to and from a more convenient form, an Fcall structure:

       typedef
       struct Fcall {
	   char  type;
	   short fid;
	   short tag;
	   union {
		 struct {
		      ushort		      oldtag;/* Tflush */
		      Qid   qid;	      /* Rattach, Rwalk,
						  Ropen, Rcreate */
		      char  rauth[AUTHENTLEN];	  /* Rattach */
		 };
		 struct {
		      char  uname[NAMELEN];   /* Tattach */
		      char  aname[NAMELEN];   /* Tattach */
		      char  ticket[TICKETLEN];	  /* Tattach */
		      char  auth[AUTHENTLEN]; /* Tattach */
		 };
		 struct {
		      char  ename[ERRLEN];    /* Rerror */
		      char  authid[NAMELEN];  /* Rsession */
		      char  authdom[DOMLEN];  /* Rsession */
		      char  chal[CHALLEN];    /* Tsession/Rsession */
		 };
		 struct {
		      long  perm;	      /* Tcreate */
		      short newfid;	      /* Tclone, Tclwalk */
		      char  name[NAMELEN];    /* Twalk, Tclwalk,
						  Tcreate */
		      char  mode;	      /* Tcreate, Topen */
		 };
		 struct {
		      long  offset;	      /* Tread, Twrite */
		      long  count;	      /* Tread, Twrite, Rread */
		      char  *data;	      /* Twrite, Rread */
		 };
		 struct {
		      char  stat[DIRLEN];     /* Twstat, Rstat */
		 };
	   };
       } Fcall;

       This  structure	is defined in <fcall.h>.  See section 5 for a full description of 9P mes-
       sages and their encoding.  For all message types, the type field of an Fcall holds one  of
       Tnop, Rnop, Tsession, Rsession, etc. (defined in an enumerated type in <fcall.h>).  Fid is
       used by most messages, and tag is used by all messages.	The other fields are used  selec-
       tively by the message types given in comments.

       ConvM2S	takes  a  9P message at ap of length n, and uses it to fill in Fcall structure f.
       If the passed message including any data for Twrite and Rread messages is formatted  prop-
       erly,  the  return  value is n; otherwise it is 0.  For Twrite and Tread messages, data is
       set to a pointer into the argument message, not a copy.

       ConvS2M does the reverse conversion, turning f into a message starting at ap.  The  length
       of the resulting message is returned.  For Twrite and Rread messages, count bytes starting
       at data are copied into the message.

       The constant MAXMSG is the length of the longest message, excluding data; MAXFDATA  (8192)
       is  the	maximum  count	in  a  read or write message.  Thus messages are guaranteed to be
       shorter than MAXMSG+MAXFDATA bytes long.

       Another structure is Dir, used by the routines described in stat(2).  ConvM2D converts the
       machine-independent  form  starting  at	ap into d and returns the length of the encoding.
       ConvD2M does the reverse translation, also returning the length of the encoding.

       GetS reads a message from file descriptor fd  into  ap  and  converts  the  message  using
       convM2S into the Fcall structure f.  The lp argument must point to a long holding the size
       of the ap buffer.  It is somewhat resilient to transient read  errors.	If  convM2S  suc-
       ceeds, its return value is stored in *lp, and getS returns zero.  Otherwise getS returns a
       string identifying the error.

       Dirconv, fcallconv, and dirmodeconv are formatting routines, suitable for fmtinstall  (see
       print(2)).   They convert Dir*, Fcall*, and long values into string representations of the
       directory buffer, Fcall buffer, or file mode value.  Fcallconv assumes  that  dirconv  has
       been installed with format letter

SOURCE
       /sys/src/libc/9sys

SEE ALSO
       intro(2), stat(2), intro(5)

DIAGNOSTICS
       GetS sets errstr.

BUGS
       The  offset  and  directory length fields have 8 bytes in the protocol, but these routines
       assume they fit into a long.

       ConvS2M should check for counts exceeding MAXFMSG.

											 FCALL(2)


All times are GMT -4. The time now is 12:55 AM.

Unix & Linux Forums Content Copyrightę1993-2018. All Rights Reserved.
UNIX.COM Login
Username:
Password:  
Show Password