| /* |
| * 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); |
| } |