You need to write the server implementation of the rfopen(), rfread(), etc. The rfopen() functions merely fopen()s the file, and record the FILE* pointer in the global fd_table and return the index to the client.
The rfread() function is listed below,
int rfread(void *ptr, int size, int nm, rFILE * stream)
{
FILE *fp;
int index = stream->fd;
/* first check if the index is valid,
if true, get the FILE pointer */
if (index < 0 || index >= MAXFILE
|| (fp = fd_table[index]) == 0)
{
fprintf(stderr, "Invalid rFILE pointer!\n");
return -1;
}
return fread(ptr, size, nm, fp);
}
That is it! The rfwrirte() function is defined by replacing the word read in the above with write.
The rchdir() function is even simpler.
int rchdir(char *path)
{
return chdir(path);
}
The rlistdir() function is a bit more complicated, but probaly you can make it simpler by writing a more elegant linked list.