[comp.lang.c] xenix III device driver help

csc@riccb.UUCP (01/24/87)

here you go line eater


please excuse my stupidity but this is the first device driver
that i have muddled my way through.  i am not sure how a device
driver returns a value to the calling function.  i'm working
with XENIX System III on an Intel 310.
this is my understanding on how the read command works
under system III.

read(dev);  <----    read(dev);    <--- bytes=read(fd,buf,cnt); 

return;     ---->  if(errno!=0)
		    return(-1);	 --->
		  else			if(bytes==-1||bytes!=cnt)	
		    return(0);   --->     something's wrong;	

the user or application program executes a read(fd,buf,cnt) to
a special file.  the kernel finds the major and minor numbers 
for the device and calls the "device driver read" routine
with the arguments passed through the "u" structure. the device
driver read function accesses the information and copies the data
it into the "u" structure (sets errno if an error occurs) and
returns to the kernel.  the kernel then checks errno to see
if it is set.  if so it returns  (-1) to the user process else
it returns 0.  
what i need to know is how do I get the # of bytes transfered 
back to the user process??   Is everything returned through
the "u" structure?? (seems so).  Do i have to acces the u.u_count
in my user process?? any help would be appreciated. is this done
any differently that system V? thanks in advance.

                      
                                                      *** * ***
Craig S. Curtin                                     ***** * *****
Rockwell International (WTPD)                      ****** * ******
(312) 985-9000 x2376                               *****  *  *****
....!ihnp4!riccb!csc                                **  *****  **
                                                       *******