79 lines
1.6 KiB
C
79 lines
1.6 KiB
C
/*
|
|
* Program for testing file locking. The original data file consists of
|
|
* characters from 'A' to 'Z'. The data file after running this program
|
|
* would consist of lines with 1's in even lines and 0's in odd lines.
|
|
*/
|
|
|
|
#include "nfs_flock.h"
|
|
#include <errno.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
|
|
#define BYTES 64
|
|
#define LINES 16384
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
int i, fd, mac;
|
|
int offset = 0;
|
|
char buf[BUFSIZ];
|
|
|
|
if (argc != 3) {
|
|
fprintf(stderr, "Usage: %s <mac num> <file name>\n", argv[0]);
|
|
exit(2);
|
|
}
|
|
|
|
if ((fd = open(argv[2], O_RDWR)) < 0) {
|
|
perror("opening a file");
|
|
exit(1);
|
|
}
|
|
|
|
mac = atoi(argv[1]);
|
|
|
|
/*
|
|
* Replace a line of characters by 1's if it is process one
|
|
* else with 0's. Number of charcters in any line are BYTES-1,
|
|
* the last character being a newline character.
|
|
*/
|
|
for (i = 0; i < BYTES - 1; i++) {
|
|
if (mac == 1)
|
|
buf[i] = '1';
|
|
else
|
|
buf[i] = '0';
|
|
}
|
|
buf[BYTES - 1] = '\n';
|
|
|
|
for (i = 0; i < LINES; i++) {
|
|
if (mac == 1) { /* Set the offset to even lines */
|
|
if ((i % 2) == 0) {
|
|
if (i == 0)
|
|
offset = 0;
|
|
else
|
|
offset += 2 * BYTES;
|
|
} else
|
|
continue;
|
|
} else { /* Set the offset to odd lines */
|
|
if ((i % 2) == 1) {
|
|
if (i == 1)
|
|
offset = BYTES;
|
|
else
|
|
offset += 2 * BYTES;
|
|
} else
|
|
continue;
|
|
}
|
|
|
|
if (writeb_lock(fd, offset, SEEK_SET, BYTES) < 0)
|
|
printf("failed in writeb_lock, Errno = %d", errno);
|
|
|
|
lseek(fd, offset, SEEK_SET);
|
|
|
|
/* write to the test file */
|
|
write(fd, buf, BYTES);
|
|
|
|
if (unb_lock(fd, offset, SEEK_SET, BYTES) < 0)
|
|
printf("failed in unb_lock, Errno = %d", errno);
|
|
}
|
|
exit(0);
|
|
}
|