Example #1
0
int main(int argc, char *argv[])
{
  int ifdes, fdes;
  int err_value;
  char input_fname[20];
  char *buf;
  ssize_t nread;
  struct pfs_stat mystat;
  int cache_hit;

  // Initialize the client
  initialize(argc, argv);
  
  // the command line arguments include an input filename
  if (argc < 2)
    {
      printf("usage: a.out <input filename>\n");
      exit(0);
    }
  strcpy(input_fname, argv[1]);
  ifdes = open(input_fname, O_RDONLY);
  buf = (char *)malloc(4*ONEKB);
  nread = pread(ifdes, (void *)buf, 3*ONEKB,8*ONEKB);

  // All the clients open the pfs file 
  fdes = pfs_open("pfs_file1", 'w');
  if(fdes < 0)
    {
      printf("Error opening file\n");
      exit(0);
    }

  //At client 3: print the file metadata
  pfs_fstat(fdes, &mystat);
  printf("File Metadata:\n");
  printf("Time of creation: %s\n", ctime(&(mystat.pst_ctime)));
  printf("Time of last modification: %s\n", ctime(&(mystat.pst_mtime)));
  printf("File Size: %d\n", mystat.pst_size);
  
  //Write the next 3 kbytes of data from the input file onto pfs_file
  err_value = pfs_write(fdes, (void *)buf, 3*ONEKB, 8*ONEKB, &cache_hit);
  printf("Wrote %d bytes to the file\n", err_value);

  err_value = pfs_read(fdes, (void *)buf, 2*ONEKB, ONEKB, &cache_hit);
  printf("Read %d bytes of data from the file\n", err_value);
  printf("%s\n",buf);

  pfs_close(fdes);
  pfs_delete("pfs_file1");
  free(buf);
  close(ifdes);
  return 0;
}
Example #2
0
int flusher()
{
	int i;
	for(i=0;i<CLIENT_CACHE_LINES;i++)
		if(metacache[i][0] == 2) //changed or dirty
		{//flush(cache[i]);
			char buf[ONEKB];
			int ofi = metacache[i][3];
			OpenFile* of = openfiles[ofi];
			int cachehit;
			pfs_write(of->fd, buf, ONEKB, metacache[i][1]*ONEKB, &cachehit);
		}
//	2. Flusher Thread: The job of the flusher thread is to periodically (every 30 seconds) flush
//	all the dirty blocks (modified blocks) back to the appropriate file servers.
//	Note that you will have to implement a hashing scheme to map and look up the file blocks onto
//	the cache.
	return 0;
}
Example #3
0
int main2(int argc, char *argv[])
{
	argc=2;argv[1]="1";
	initialize(argc,argv);
  int fdes;
  int err_value;
  off_t myoff;
  char *buf;
  int cache_hit, go_on;
  ssize_t nread;

  // Open the file in the write mode
  fdes = pfs_open("pfs_file1", "w");
  if(fdes < 0)
    {
      printf("Error opening file\n");
      exit(0);
    }

  //Do overlapping writes onto the same pfs_file from multiple clients
  buf = (char*)malloc(ONEKB);
  while(go_on)
    {
      printf("Enter text to be written to the file\ntext>");
      scanf("%[^\n]s", buf);
      printf("Enter the offset:");
      scanf("%d", &myoff);
      err_value = pfs_write(fdes, (void *)buf, strlen(buf), myoff, &cache_hit);
      printf("Wrote %d bytes to the file\n", err_value);
      printf("Enter more text? (1 or 0):");
      scanf("%d", &go_on);
    }

  free(buf);
  pfs_close(fdes);
}