File:  [Research Unix] / researchv10no / libc / fio / tstwr.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:35 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv10, HEAD
researchv10 Norman

#include	<fio.h>
#include	<libc.h>

#define	TMP	"/tmp/tstwr"

main(argc, argv)
	char **argv;
{
	register n, c, k;
	int len, fd, cd;
	char *b1, *b2, *p;

	if(argc < 2){
		Fprint(2, "Usage: tstwr file\n");
		exit(1);
	}
	len = flen(argv[1]);
	if((fd = open(argv[1], 0)) < 0){
		perror(argv[1]);	
		exit(1);
	}
	if((b1 = malloc(len)) == 0){
		Fprint(2, "malloc(%d) failed\n", len);
		exit(1);
	}
	if(read(fd, b1, len) != len){
		perror("read");
		exit(1);
	}
	close(fd);
	if((fd = creat(TMP, 0666)) < 0){
		perror(TMP);	
		exit(1);
	}
	close(fd);
	if((fd = open(TMP, 2)) < 0){
		perror(TMP);	
		exit(1);
	}
/*	unlink(TMP);	/**/
	if((b2 = malloc(len)) == 0){
		Fprint(2, "malloc(%d) failed\n", len);
		exit(1);
	}
	for(p = b1, cd = 0; cd < len;){
		n = 1000*nrand(6) + nrand(199);
		if(n > len-cd) n = len-cd;
		Fprint(1, "%d putc's\n", n);
		cd += n;
		while(n--)
			Fputc(fd, *p++);
		if(len == cd)
			continue;
		n = 1000*nrand(12) + nrand(199);
		if(n > len-cd) n = len-cd;
		cd += n;
		Fprint(1, "%d write\n", n);
		if(Fwrite(fd, p, (long)n) != (long)n) break;
		p += n;
	}
done:
	Fflush(fd);
	lseek(fd, 0L, 0);
	if((n = read(fd, b2, len)) != len){
		fprint(2, "read %d, len=%d: ", n, len);
		perror("read2");
		exit(1);
	}
	if(memcmp(b1, b2, len)){
		Fprint(2, "memcmp failed!\n");
		exit(1);
	}
	Fprint(2, "tstwr: %d bytes, succeeded\n", len);
	exit(0);
}

#include	<sys/types.h>
#include	<sys/stat.h>

flen(s)
	char *s;
{
	struct stat sb;
	int n;

	if(stat(s, &sb) < 0){
		perror(s);
		exit(1);
	}
	n = sb.st_size;
	if(sizeof(int) == 2)
		n &= 0x7FFF;
	return(n);
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.