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; }
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; }
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); }