This is fstime.c in view mode; [Download] [Up]
/*******************************************************************************
* The BYTE UNIX Benchmarks - Release 3
* Module: fstime.c SID: 3.5 5/15/91 19:30:19
*
*******************************************************************************
* Bug reports, patches, comments, suggestions should be sent to:
*
* Ben Smith, Rick Grehan or Tom Yager
* ben@bytepb.byte.com rick_g@bytepb.byte.com tyager@bytepb.byte.com
*
*******************************************************************************
* Modification Log:
* $Header: fstime.c,v 3.4 87/06/22 14:23:05 kjmcdonell Beta $
* 10/19/89 - rewrote timing calcs and added clock check (Ben Smith)
* 10/26/90 - simplify timing, change defaults (Tom Yager)
* 11/16/90 - added better error handling and changed output format (Ben Smith)
* 11/17/90 - changed the whole thing around (Ben Smith)
* 2/22/91 - change a few style elements and improved error handling (Ben Smith)
* 4/17/91 - incorporated suggestions from Seckin Unlu (seckin@sumac.intel.com)
* 4/17/91 - limited size of file, will rewind when reaches end of file
******************************************************************************/
char SCCSid[] = "@(#) @(#)fstime.c:3.5 -- 5/15/91 19:30:19";
#include <stdio.h>
#include <signal.h>
#include <errno.h>
#define SECONDS 2
#define BUFF_SIZE 1024
#define MAX_BLOCKS 2000 /* max number of BUFF_SIZE blocks in file */
#define FNAME0 "dummy0"
#define FNAME1 "dummy1"
/****************** GLOBALS ***************************/
char buf[BUFF_SIZE];
int seconds = SECONDS;
int f;
int g;
int i;
int stop_count();
int clean_up();
int sigalarm = 0;
/******************** MAIN ****************************/
main(argc, argv)
char **argv;
{
/**** initialize ****/
if (argc > 1)
seconds = atoi(argv[1]);
if (argc == 3 && chdir(argv[2]) == -1)
{
perror("fstime: chdir");
exit(1);
}
if((f = creat(FNAME0, 0600)) != -1)
close(f);
else
{
perror("fstime: creat");
exit(1);
}
if((g = creat(FNAME1, 0600)) != -1)
close(g);
else
{
perror("fstime: creat");
exit(1);
}
if( (f = open(FNAME0, 2)) == -1)
{
perror("fstime: open");
exit(1);
}
if( ( g = open(FNAME1, 2)) == -1 )
{
perror("fstime: open");
exit(1);
}
/* fill buffer */
for (i = 0; i < BUFF_SIZE; i++)
buf[i] = i & 0177;
/*** run the tests ****/
signal(SIGKILL,clean_up);
if(w_test() || r_test() || c_test())
{
clean_up();
exit(1);
}
/* else */
clean_up();
exit(0);
}
w_test()
/* write test */
{
long n_blocks = 0L;
int f_blocks;
extern int sigalarm;
sync();
sleep(5); /* to insure the sync */
signal(SIGALRM,stop_count);
sigalarm = 0; /* reset alarm flag */
alarm(seconds);
while(!sigalarm)
{
for(f_blocks=0; f_blocks < MAX_BLOCKS; ++f_blocks)
{
if (write(f, buf, BUFF_SIZE) < 0)
{
if (errno != EINTR) {
perror("fstime: write");
return(-1);
} else stop_count();
}
++ n_blocks;
}
lseek(f, 0L, 0); /* rewind */
}
/* stop clock */
fprintf(stderr, "%d second sample\n", seconds);
fprintf(stderr, "%ld Kbytes/sec write\n",
(long) n_blocks / (long) seconds);
return(0);
}
r_test()
/* read test */
{
long n_blocks = 0L;
extern int sigalarm;
extern int errno;
/* rewind */
sync();
sleep(10+seconds/2);
errno = 0;
lseek(f, 0L, 0);
signal(SIGALRM,stop_count);
sigalarm = 0; /* reset alarm flag */
alarm(seconds);
while(!sigalarm)
{
if (read(f, buf, BUFF_SIZE) < 0) /* read while checking for an error */
switch(errno)
{
case 0:
case EINVAL:
lseek(f, 0L, 0); /* rewind at end of file */
continue;
break;
case EINTR:
stop_count();
break;
default:
perror("fstime: read");
return(-1);
break;
}
++ n_blocks;
}
/* stop clock */
fprintf(stderr, "%d second sample\n", seconds);
fprintf(stderr, "%ld Kbytes/sec read\n",
(long) n_blocks / (long) seconds);
return(0);
}
c_test()
/* copy test */
{
long n_blocks = 0L;
extern int sigalarm;
/* rewind */
sync();
sleep(10+seconds/2); /* to insure the sync */
errno - 0;
lseek(f, 0L, 0);
signal(SIGALRM,stop_count);
sigalarm = 0; /* reset alarm flag */
alarm(seconds);
while(!sigalarm)
{
if (read(f, buf, BUFF_SIZE) < 0)
switch(errno)
{
case 0:
case EINVAL:
lseek(f, 0L, 0); /* rewind at end of file */
lseek(g, 0L, 0); /* rewind the output as well */
continue;
break;
case EINTR:
stop_count();
break;
default:
perror("fstime: copy read");
return(-1);
break;
}
if (write(g, buf, BUFF_SIZE) < 0)
{
if (errno != EINTR) {
perror("fstime: copy write");
return(-1);
} else stop_count();
}
++ n_blocks;
}
/* stop clock */
fprintf(stderr, "%d second sample\n", seconds);
fprintf(stderr, "%ld Kbytes/sec copy \n",
(long) n_blocks / (long) seconds);
return(0);
}
stop_count()
{
extern int sigalarm;
sigalarm = 1;
return(0);
}
clean_up()
{
if( unlink(FNAME0) || unlink(FNAME1))
return(-1);
else
return(0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.