+}
+
+static void take_lock(FILE *f) {
+ struct flock lock;
+ lock.l_type = F_WRLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+ int fd = fileno(f);
+ if (fd == -1)
+ die_err("Couldn't get file descriptor for locking");
+ if (fcntl(fd, F_SETLK, &lock) == 0)
+ return;
+ if (errno != EACCES && errno != EAGAIN)
+ die_err("Couldn't take lock");
+ if (fputs(WAITING, stderr) == EOF)
+ die("Error writing waiting message");
+ if (fcntl(fd, F_SETLKW, &lock) == 0)
+ return;
+ die_err("Couldn't take lock");
+}
+
+static void write_acknowledgment(conf_t conf) {