📄 fstest.cc
字号:
// fstest.cc // Simple test routines for the file system. //// We implement:// Copy -- copy a file from UNIX to Nachos// Print -- cat the contents of a Nachos file // Perftest -- a stress test for the Nachos file system// read and write a really large file in tiny chunks// (won't work on baseline system!)//// Copyright (c) 1992-1993 The Regents of the University of California.// All rights reserved. See copyright.h for copyright notice and limitation // of liability and disclaimer of warranty provisions.#include "copyright.h"#include "utility.h"#include "filesys.h"#include "system.h"#include "thread.h"#include "disk.h"#include "stats.h"#define TransferSize 10 // make it small, just to be difficult//----------------------------------------------------------------------// Copy// Copy the contents of the UNIX file "from" to the Nachos file "to"//----------------------------------------------------------------------voidCopy(char *from, char *to){ FILE *fp; OpenFile* openFile; int amountRead, fileLength; char *buffer;// Open UNIX file if ((fp = fopen(from, "r")) == NULL) { printf("Copy: couldn't open input file %s\n", from); return; }// Figure out length of UNIX file fseek(fp, 0, 2); fileLength = ftell(fp); fseek(fp, 0, 0);// Create a Nachos file of the same length DEBUG('f', "Copying file %s, size %d, to file %s\n", from, fileLength, to); if (!fileSystem->Create(to, fileLength)) { // Create Nachos file printf("Copy: couldn't create output file %s\n", to); fclose(fp); return; } openFile = fileSystem->Open(to); ASSERT(openFile != NULL); // Copy the data in TransferSize chunks buffer = new char[TransferSize]; while ((amountRead = fread(buffer, sizeof(char), TransferSize, fp)) > 0) openFile->Write(buffer, amountRead); delete [] buffer;// Close the UNIX and the Nachos files delete openFile; fclose(fp);}//----------------------------------------------------------------------// Print// Print the contents of the Nachos file "name".//----------------------------------------------------------------------voidPrint(char *name){ OpenFile *openFile; int i, amountRead; char *buffer; if ((openFile = fileSystem->Open(name)) == NULL) { printf("Print: unable to open file %s\n", name); return; } buffer = new char[TransferSize]; while ((amountRead = openFile->Read(buffer, TransferSize)) > 0) for (i = 0; i < amountRead; i++) printf("%c", buffer[i]); delete [] buffer; delete openFile; // close the Nachos file return;}//----------------------------------------------------------------------// PerformanceTest// Stress the Nachos file system by creating a large file, writing// it out a bit at a time, reading it back a bit at a time, and then// deleting the file.//// Implemented as three separate routines:// FileWrite -- write the file// FileRead -- read the file// PerformanceTest -- overall control, and print out performance #'s//----------------------------------------------------------------------#define FileName "TestFile"#define Contents "1234567890"#define ContentSize strlen(Contents)#define FileSize ((int)(ContentSize * 5000))static void FileWrite(){ OpenFile *openFile; int i, numBytes; printf("Sequential write of %d byte file, in %d byte chunks\n", FileSize, ContentSize); if (!fileSystem->Create(FileName, 0)) { printf("Perf test: can't create %s\n", FileName); return; } openFile = fileSystem->Open(FileName); if (openFile == NULL) { printf("Perf test: unable to open %s\n", FileName); return; } for (i = 0; i < FileSize; i += ContentSize) { numBytes = openFile->Write(Contents, ContentSize); if (numBytes < 10) { printf("Perf test: unable to write %s\n", FileName); delete openFile; return; } } delete openFile; // close file}static void FileRead(){ OpenFile *openFile; char *buffer = new char[ContentSize]; int i, numBytes; printf("Sequential read of %d byte file, in %d byte chunks\n", FileSize, ContentSize); if ((openFile = fileSystem->Open(FileName)) == NULL) { printf("Perf test: unable to open file %s\n", FileName); delete [] buffer; return; } for (i = 0; i < FileSize; i += ContentSize) { numBytes = openFile->Read(buffer, ContentSize); if ((numBytes < 10) || strncmp(buffer, Contents, ContentSize)) { printf("Perf test: unable to read %s\n", FileName); delete openFile; delete [] buffer; return; } } delete [] buffer; delete openFile; // close file}voidPerformanceTest(){ printf("Starting file system performance test:\n"); stats->Print(); FileWrite(); FileRead(); if (!fileSystem->Remove(FileName)) { printf("Perf test: unable to remove %s\n", FileName); return; } stats->Print();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -