A lock can only be requested on a file with a valid open descriptor. For read locks, the file must be opened with at least read access. For write locks, the file must also be opened with write access. In this example, a file is opened for both read and write access.
... filename = argv[1]; fd = open (filename, O_RDWR); if(fd < 0) { perror(filename); exit(2); } ...