Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
CBuffFileStream/CTestJig.c
/* |
File: CTestJig.c |
Contains: Test Jig. |
Written by: Steve Bollinger |
Copyright: Copyright (c) 1999 Apple Computer, Inc., All Rights Reserved. |
You may incorporate this Apple sample source code into your program(s) without |
restriction. This Apple sample source code has been provided "AS IS" and the |
responsibility for its operation is yours. You are not permitted to redistribute |
this Apple sample source code as "Apple sample source code" after having made |
changes. If you're going to re-distribute the source, we require that you make |
it clear in the source that the code was descended from Apple sample source |
code, but that you've made changes. |
*/ |
#include <Types.h> |
#include <Files.h> |
#include <Errors.h> |
#include <Script.h> |
#include <LowMem.h> |
#include <stdio.h> |
#include "CBuffFileStream.h" |
#include "CTestJig.h" |
// Changing BUFFERED from 1 to 0 will use the file system directly |
// to test speedups. |
#define BUFFERED 1 |
// Setting CHECKCONTENTS to 1 will do some rudimentary verification |
// of the data actually read. |
#define CHECKCONTENTS 0 |
unsigned long DoWriteTest(void) |
{ |
unsigned long startTicks; |
unsigned long endTicks; |
unsigned long *writeamts; |
unsigned long numwriteamts; |
FILE *rdfile; |
unsigned long iter; |
OSErr ckErr; |
#if BUFFERED |
CBuffFileStreamData *newdata; |
#else |
short filenum; |
#endif |
FSSpec fileLoc; |
unsigned long largestrandvalue = 100000; |
unsigned long *wrSpace; |
rdfile = fopen("sizelist","r"); |
fscanf(rdfile,"%lu\n",&numwriteamts); |
writeamts = (unsigned long *) NewPtr(sizeof(unsigned long) * numwriteamts); |
for (iter = 0; iter < numwriteamts; iter++) |
{ |
fscanf(rdfile,"%lu\n",&(writeamts[iter])); |
} |
fclose(rdfile); |
// now we have the data we need |
// make a buffer to write from |
wrSpace = (unsigned long *) NewPtrClear(largestrandvalue); |
if (0 == wrSpace) |
return 0; |
// create a spec to the file to open |
ckErr = FSMakeFSSpec(0,0,"\ptestfile",&fileLoc); |
if (fnfErr == ckErr) |
(void) FSpCreate(&fileLoc,0,0,smSystemScript); |
startTicks = LMGetTicks(); |
#if BUFFERED |
ckErr = BFSOpenFile(&newdata,&fileLoc,fsRdWrPerm); |
if (noErr != ckErr) |
return 0; |
for (iter = 0; iter < numwriteamts; iter++) |
{ |
long wrAmt = (long) writeamts[iter]; |
*wrSpace = (unsigned long) wrAmt; |
ckErr = BFSWrite(newdata,&wrAmt,wrSpace); |
if (noErr != ckErr) |
return 0; |
} |
ckErr = BFSCloseFile(newdata); |
if (noErr != ckErr) |
return 0; |
#else |
ckErr = FSpOpenDF(&fileLoc,fsRdWrPerm,&filenum); |
if (noErr != ckErr) |
return 0; |
for (iter = 0; iter < numwriteamts; iter++) |
{ |
long wrAmt = (long) writeamts[iter]; |
*wrSpace = (unsigned long) wrAmt; |
ckErr = FSWrite(filenum,&wrAmt,wrSpace); |
if (noErr != ckErr) |
return 0; |
} |
ckErr = FSClose(filenum); |
if (noErr != ckErr) |
return 0; |
#endif |
endTicks = LMGetTicks(); |
DisposePtr((Ptr) wrSpace); |
DisposePtr((Ptr) writeamts); |
return endTicks - startTicks; |
} |
unsigned long DoReadTest(void) |
{ |
unsigned long startTicks; |
unsigned long endTicks; |
unsigned long *readamts; |
unsigned long numreadamts; |
FILE *rdfile; |
unsigned long iter; |
OSErr ckErr; |
#if BUFFERED |
CBuffFileStreamData *newdata; |
#else |
short filenum; |
#endif |
FSSpec fileLoc; |
unsigned long largestrandvalue = 100000; |
unsigned long *rdSpace; |
rdfile = fopen("sizelist","r"); |
fscanf(rdfile,"%lu\n",&numreadamts); |
readamts = (unsigned long *) NewPtr(sizeof(unsigned long) * numreadamts); |
for (iter = 0; iter < numreadamts; iter++) |
{ |
fscanf(rdfile,"%lu\n",&(readamts[iter])); |
} |
fclose(rdfile); |
// now we have the data we need |
// make a buffer to read to |
rdSpace = (unsigned long *) NewPtrClear(largestrandvalue); |
if (0 == rdSpace) |
return 0; |
// create a spec to the file to open |
ckErr = FSMakeFSSpec(0,0,"\ptestfile",&fileLoc); |
if (noErr != ckErr) |
return 0; |
startTicks = LMGetTicks(); |
#if BUFFERED |
ckErr = BFSOpenFile(&newdata,&fileLoc,fsRdPerm); |
if (noErr != ckErr) |
return 0; |
for (iter = 0; iter < numreadamts; iter++) |
{ |
long rdAmt = (long) readamts[iter]; |
// *rdSpace = (unsigned long) rdAmt; |
ckErr = BFSRead(newdata,&rdAmt,rdSpace); |
if (noErr != ckErr) |
return 0; |
#if CHECKCONTENTS |
if (readamts[iter] != *rdSpace) |
{ |
DebugStr("\pread back not correct"); |
} |
#endif |
} |
ckErr = BFSCloseFile(newdata); |
if (noErr != ckErr) |
return 0; |
#else |
ckErr = FSpOpenDF(&fileLoc,fsRdPerm,&filenum); |
if (noErr != ckErr) |
return 0; |
for (iter = 0; iter < numreadamts; iter++) |
{ |
long rdAmt = (long) readamts[iter]; |
// *rdSpace = (unsigned long) rdAmt; |
ckErr = FSRead(filenum,&rdAmt,rdSpace); |
if (noErr != ckErr) |
return 0; |
#if CHECKCONTENTS |
if (readamts[iter] != *rdSpace) |
{ |
DebugStr("\pread back not correct"); |
} |
#endif |
} |
ckErr = FSClose(filenum); |
if (noErr != ckErr) |
return 0; |
#endif |
endTicks = LMGetTicks(); |
DisposePtr((Ptr) rdSpace); |
DisposePtr((Ptr) readamts); |
return endTicks - startTicks; |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14