#include #include #include #include #include #include #include #include void usage(char *progname) { fprintf(stderr, "usage: %s [-s] [filename]\n", progname); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { int fd; char *filename = "shared.txt"; int lockmode = LOCK_EX; if ( argc == 2 ) { if ( strcmp("-s", argv[1]) == 0 ) { lockmode = LOCK_SH; } else { filename = argv[1]; } } else if ( argc == 3 ) { if ( strcmp("-s", argv[1]) == 0 ) { lockmode = LOCK_SH; filename = argv[2]; } else if ( strcmp("-s", argv[2]) == 0 ) { lockmode = LOCK_SH; filename = argv[1]; } else { usage(argv[0]); } } else if ( argc > 3 ) { usage(argv[0]); } fd = open(filename, O_RDWR); if ( fd < 0 ) { fprintf(stderr, "Could not open file %s\n", filename); exit(EXIT_FAILURE); } fprintf(stdout, "trying to lock %s (%s)\n", filename, lockmode == LOCK_EX ? "exclusive" : "shared"); flock(fd, lockmode); fprintf(stdout, "successfully locked %s\n", filename); while ( 1 ) { sleep(1); } }