int main(void) { int fd1, fd2; struct stat *stat; changedir("/testdir/test"); fd1 = safe_open("testfile", O_RDWR | O_TRUNC); stat = safe_fstat(fd1); assert(stat->st_size == 0 && stat->st_nlinks == 1); safe_link("testfile", "orz"); fd2 = safe_open("orz", O_RDONLY); stat = safe_fstat(fd1); assert(stat->st_size == 0 && stat->st_nlinks == 2); stat = safe_fstat(fd2); assert(stat->st_size == 0 && stat->st_nlinks == 2); const char *msg = "Hello world!!\n"; static char buffer[1024]; size_t len = strlen(msg); memcpy(buffer, msg, len); safe_write(fd1, buffer, len); changedir("."); memset(buffer, 0, sizeof(buffer)); safe_read(fd2, buffer, len); assert(strncmp(buffer, msg, len) == 0); cprintf("link test ok.\n"); safe_unlink("orz"); stat = safe_fstat(fd2); assert(stat->st_size == len && stat->st_nlinks == 1); close(fd2); changedir("."); cprintf("unlink test ok.\n"); fd2 = safe_open("testfile", O_RDWR | O_TRUNC); safe_write(fd1, buffer, len); stat = safe_fstat(fd2); assert(stat->st_size == len * 2 && stat->st_nlinks == 1); fd2 = safe_open("testfile", O_RDWR | O_TRUNC); assert(link("test", "..") != 0); assert(link("testfile", ".") != 0); assert(link("testfile", "./testfile") != 0); assert(unlink(".") != 0 && unlink("..") != 0); changedir("."); cprintf("sfs_filetest3 pass.\n"); return 0; }
int main(void) { int fd1, fd2; struct stat *stat; changedir("/testdir/test"); { safe_mkdir("/testdir/test/dir0/"); assert(mkdir("testfile") != 0 && mkdir("../test/dir0/") != 0); assert(mkdir("dir0/dir1/dir2") != 0); safe_mkdir("dir0/dir1/"); fd1 = safe_open("file1", O_CREAT | O_RDWR | O_EXCL); fd2 = safe_open("file1", O_CREAT | O_RDWR); stat = safe_fstat(fd1); assert(stat->st_nlinks == 1); stat = safe_fstat(fd2); assert(stat->st_nlinks == 1); assert(open("file1", O_CREAT | O_EXCL) < 0); changedir("."); safe_link("file1", "dir0/dir1/file2"); changedir("."); stat = safe_fstat(fd1); assert(stat->st_nlinks == 2); } changedir("dir0/dir1"); { assert(unlink("dir0/dir1") != 0); safe_unlink("/testdir/test/dir0/dir1/file2"); safe_unlink("/testdir/test/dir0/dir1"); stat = safe_fstat(fd1); assert(stat->st_nlinks == 1); } changedir("/testdir/test/dir0"); { safe_unlink("../file1"); safe_unlink("../dir0"); } changedir("/testdir/test"); printf("sfs_dirtest2 pass.\n"); return 0; }