/* Skeleton of exim's delivery logic. Problem with read() on line 32 */ #include #include #include #include #include main() { int fd, pid, l; char buffer[100]; struct flock lock_data; /* The parent opens a file, sets close on exec and locks it */ fd = open("try.c", O_RDWR | O_APPEND); printf("open: %d %d\n", fd, errno); l = fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); printf("fcntl: %d %d\n", l, errno); lock_data.l_type = F_WRLCK; lock_data.l_whence = lock_data.l_start = lock_data.l_len = 0; l = fcntl(fd, F_SETLK, &lock_data); printf("fcntl: %d %d\n", l, errno); pid = fork(); if (pid == 0) { printf("Child\n"); l = lseek(fd, 5, SEEK_SET); printf("lseek: %d %d\n", l, errno); l = read(fd, buffer, 10); /* <=== */ printf("read: %d %d\n", l, errno); } else { sleep(1); printf("Parent %d\n", pid); } }