Home | History | Annotate | Download | only in nfslock01
      1 /*
      2  * Program for testing file locking. The original data file consists of
      3  * characters from 'A' to 'Z'. The data file after running this program
      4  * would consist of lines with 1's in even lines and 0's in odd lines.
      5  */
      6 
      7 #include "nfs_flock.h"
      8 #include <errno.h>
      9 #include <stdio.h>
     10 #include <stdlib.h>
     11 #include <unistd.h>
     12 
     13 #define BYTES 64
     14 #define LINES 16384
     15 
     16 int main(int argc, char **argv)
     17 {
     18 	int i, fd, mac;
     19 	int offset = 0;
     20 	char buf[BUFSIZ];
     21 
     22 	if (argc != 3) {
     23 		fprintf(stderr, "Usage: %s <mac num> <file name>\n", argv[0]);
     24 		exit(2);
     25 	}
     26 
     27 	if ((fd = open(argv[2], O_RDWR)) < 0) {
     28 		perror("opening a file");
     29 		exit(1);
     30 	}
     31 
     32 	mac = atoi(argv[1]);
     33 
     34 	/*
     35 	 * Replace a line of characters by 1's if it is process one
     36 	 * else with 0's. Number of charcters in any line are BYTES-1,
     37 	 * the last character being a newline character.
     38 	 */
     39 	for (i = 0; i < BYTES - 1; i++) {
     40 		if (mac == 1)
     41 			buf[i] = '1';
     42 		else
     43 			buf[i] = '0';
     44 	}
     45 	buf[BYTES - 1] = '\n';
     46 
     47 	for (i = 0; i < LINES; i++) {
     48 		if (mac == 1) {	/* Set the offset to even lines */
     49 			if ((i % 2) == 0) {
     50 				if (i == 0)
     51 					offset = 0;
     52 				else
     53 					offset += 2 * BYTES;
     54 			} else
     55 				continue;
     56 		} else {	/* Set the offset to odd lines */
     57 			if ((i % 2) == 1) {
     58 				if (i == 1)
     59 					offset = BYTES;
     60 				else
     61 					offset += 2 * BYTES;
     62 			} else
     63 				continue;
     64 		}
     65 
     66 		if (writeb_lock(fd, offset, SEEK_SET, BYTES) < 0)
     67 			printf("failed in writeb_lock, Errno = %d", errno);
     68 
     69 		lseek(fd, offset, SEEK_SET);
     70 
     71 		/* write to the test file */
     72 		write(fd, buf, BYTES);
     73 
     74 		if (unb_lock(fd, offset, SEEK_SET, BYTES) < 0)
     75 			printf("failed in unb_lock, Errno = %d", errno);
     76 	}
     77 	exit(0);
     78 }
     79