#include #include #include #include void show_stat(int fd) { struct stat buf; int rc; rc = fstat(fd, &buf); if (rc != 0) { perror("fstat() failed"); exit(1); } printf("nlink = %8d\n", buf.st_nlink); printf("size = %8ld\n", buf.st_size); } int main(void) { int fd; int n, nr; char buf[1]; fd = open("in", O_RDONLY); if (fd == -1) { perror("open(in) failed"); exit(1); } show_stat(fd); if (unlink("in") != 0) { perror("unlink(in) failed"); exit(1); } show_stat(fd); // !!! Crash here in fstat() !!! n = 0; while ((nr = read(fd, buf, sizeof(buf))) > 0) { n += nr; } if (nr != 0) { perror("read() failed"); exit(1); } printf("readed = %8d\n\n", n); sleep(30); show_stat(fd); close(fd); show_stat(fd); return 0; }