⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fstest.c

📁 Simple Operating Systems (简称SOS)是一个可以运行在X86平台上(包括QEMU
💻 C
📖 第 1 页 / 共 2 页
字号:
  TEST_EXPECT_CONDITION(mkdir("yoplait1", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(rename("yoplait1", "mouf1"), RETVAL == 0);  TEST_EXPECT_CONDITION(fd = open("mouf1/a", O_RDWR | O_CREAT, S_IRWXALL), RETVAL == 19);  TEST_EXPECT_CONDITION(unlink("mouf1/a"), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("mouf1"), RETVAL == 0);  TEST_EXPECT_CONDITION(mkdir("yoplait2", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(rename("yoplait2", "mouf2"), RETVAL == 0);  TEST_EXPECT_CONDITION(fd = open("mouf2/a", O_RDWR | O_CREAT, S_IRWXALL), RETVAL == 20);  TEST_EXPECT_CONDITION(rmdir("mouf2"), RETVAL < 0);  TEST_EXPECT_CONDITION(mkdir("yoplait3", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(rename("yoplait3", "mouf3"), RETVAL == 0);  TEST_EXPECT_CONDITION(creat("mouf3/a", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(unlink("mouf3/a"), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("mouf3"), RETVAL == 0);  TEST_EXPECT_CONDITION(mkdir("yoplait4", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(rename("yoplait4", "mouf4"), RETVAL == 0);  TEST_EXPECT_CONDITION(creat("mouf4/a", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("mouf4"), RETVAL < 0);  ls("/", 1, 1);  ls("/", 1, 1);  ls("..", 1, 1);  ls("../", 1, 1);  ls("/..", 1, 1);  /* subdirs */  TEST_EXPECT_CONDITION(fd = open("yo1/titi1.txt", O_RDONLY), RETVAL < 0);  TEST_EXPECT_CONDITION(fd = open("yo1/titi1.txt", O_RDONLY | O_CREAT, S_IRUSR), RETVAL < 0);  ls("/", 1, 1);  ls("/yo1", 1, 1);  TEST_EXPECT_CONDITION(mkdir("yo1", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(fd = open("yo1/titi1.txt", O_RDONLY), RETVAL < 0);  TEST_EXPECT_CONDITION(fd = open("yo1/titi1.txt", O_RDONLY | O_CREAT, S_IRUSR), RETVAL == 21);  ls("/", 1, 1);  ls("/yo1", 1, 1);  TEST_EXPECT_CONDITION(mkdir("yo2", S_IRUSR | S_IXUSR), RETVAL == 0);  TEST_EXPECT_CONDITION(fd = open("yo2/titi1.txt", O_RDONLY), RETVAL < 0);  TEST_EXPECT_CONDITION(fd = open("yo2/titi1.txt", O_RDONLY | O_CREAT, S_IRUSR), RETVAL < 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(mkdir("yo3", S_IWUSR | S_IXUSR), RETVAL == 0);  TEST_EXPECT_CONDITION(fd = open("yo3/titi1.txt", O_RDONLY), RETVAL < 0);  TEST_EXPECT_CONDITION(fd = open("yo3/titi1.txt", O_RDONLY | O_CREAT, S_IRUSR), RETVAL == 22);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(mkdir("yo4", S_IWUSR), RETVAL == 0);  TEST_EXPECT_CONDITION(fd = open("yo4/titi1.txt", O_RDONLY), RETVAL < 0);  TEST_EXPECT_CONDITION(fd = open("yo4/titi1.txt", O_RDONLY | O_CREAT, S_IRUSR), RETVAL < 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(chdir("nowhere"), RETVAL < 0);  TEST_EXPECT_CONDITION(chdir("yo1"), RETVAL == 0);  ls(".", 1, 1);  ls("/", 1, 1);  ls("..", 1, 1);  ls("../../../../", 1, 1);  ls("/../../../../", 1, 1);  /* Test chroot */  TEST_EXPECT_CONDITION(chroot("nowhere"), RETVAL < 0);  TEST_EXPECT_CONDITION(chroot("."), RETVAL == 0);  ls(".", 1, 1);  ls("/", 1, 1);  ls("..", 1, 1);  ls("../../../../", 1, 1);  ls("/../../../../", 1, 1);  /* mount */  TEST_EXPECT_CONDITION(mount(NULL, "nowhere", NULL, 0, NULL), RETVAL < 0);  TEST_EXPECT_CONDITION(mount(NULL, "nowhere", "yoplait", 0, NULL), RETVAL < 0);  TEST_EXPECT_CONDITION(mount(NULL, "nowhere", "virtfs", 0, NULL), RETVAL < 0);  TEST_EXPECT_CONDITION(mkdir("mnt", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(mkdir("mnt/subdir0", S_IRWXALL), RETVAL == 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(mount(NULL, "mnt", "virtfs", 0, NULL), RETVAL == 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(mkdir("mnt/subdir_mounted", S_IRWXALL), RETVAL == 0);  ls("/", 1, 1);  /* Make sure we cannot umount if the FS is in use */  TEST_EXPECT_CONDITION(fd = open("mnt/subdir_mounted", O_DIRECTORY), RETVAL == 23);  TEST_EXPECT_CONDITION(umount("mnt"), RETVAL < 0);  TEST_EXPECT_CONDITION(close(fd), RETVAL == 0);  /* Make sure we cannot umount if the FS is in use */  TEST_EXPECT_CONDITION(chdir("mnt"), RETVAL == 0);  TEST_EXPECT_CONDITION(umount("/mnt"), RETVAL < 0);  TEST_EXPECT_CONDITION(chdir(".."), RETVAL == 0);  ls(".", 1, 1);    /* Create another process that chdirs in it */  if (fork() == 0)    {      bochs_printf("Hello from child\n");      TEST_EXPECT_CONDITION(chdir("mnt"), RETVAL == 0);      TEST_EXPECT_CONDITION(fd = open("subdir_mounted", O_DIRECTORY), RETVAL == 23);      bochs_printf("Child sleeping...\n");      nanosleep(2, 0);      bochs_printf("Bye from child\n");      return 0;    }  else    {      bochs_printf("Father sleeping\n");      nanosleep(1, 0);      bochs_printf("Father trying to umount, should fail (a process chdir'ed in it)\n");      TEST_EXPECT_CONDITION(umount("mnt"), RETVAL < 0);      bochs_printf("Father Resuming normal operation in 3s...\n");      nanosleep(3, 0);    }  TEST_EXPECT_CONDITION(umount(NULL), RETVAL < 0);  TEST_EXPECT_CONDITION(umount("nowhere"), RETVAL < 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(umount("mnt"), RETVAL == 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(umount("mnt"), RETVAL < 0);  /*   * Mountchain exploration   */  TEST_EXPECT_CONDITION(mkdir("/mnt2", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(mkdir("/mnt2/nothing-mounted", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(mount(NULL, "mnt2", "virtfs", 0, NULL), RETVAL == 0);  TEST_EXPECT_CONDITION(mkdir("/mnt2/mountpoint-1", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(mount(NULL, "mnt2", "virtfs", 0, NULL), RETVAL == 0);  TEST_EXPECT_CONDITION(mkdir("/mnt2/mountpoint-2", S_IRWXALL), RETVAL == 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(umount("mnt2"), RETVAL == 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(umount("mnt2"), RETVAL == 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(umount("mnt2"), RETVAL < 0);  /*   * Erasing files while they are in use   */  TEST_EXPECT_CONDITION(fd = open("toto8.txt", O_RDWR | O_CREAT,				  S_IRUSR | S_IWUSR),			RETVAL == 23);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(unlink("toto8.txt"), RETVAL == 0);  ls("/", 1, 1);  strzcpy(buff, "Garbage garbage garbage", 256);  TEST_EXPECT_CONDITION(len = read(fd, buff, 256), RETVAL == 0);  TEST_EXPECT_CONDITION(lseek(fd, 0, SEEK_SET), RETVAL == 0);    strzcpy(buff, "Hello world from toto8", 256);  TEST_EXPECT_CONDITION(len = write(fd, buff, 24), RETVAL == 24);  TEST_EXPECT_CONDITION(lseek(fd, 0, SEEK_SET), RETVAL == 0);    strzcpy(buff, "Garbage garbage garbage", 256);  TEST_EXPECT_CONDITION(len = read(fd, buff, 256), RETVAL == 24);  bochs_printf("read s='%s'\n", buff);  /*   * rmdir on still used dirs   */  TEST_EXPECT_CONDITION(mkdir("plotch", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(chdir("plotch"), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("../plotch"), RETVAL < 0);  TEST_EXPECT_CONDITION(chdir(".."), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("plotch"), RETVAL == 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(mkdir("plotch", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(creat("plotch/a", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("plotch"), RETVAL < 0);  TEST_EXPECT_CONDITION(unlink("plotch/a"), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("plotch"), RETVAL == 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(mkdir("plotch", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(fd = open("plotch/a", O_RDWR | O_CREAT, S_IRWXALL),			RETVAL == 24);  TEST_EXPECT_CONDITION(rmdir("plotch"), RETVAL < 0);  TEST_EXPECT_CONDITION(unlink("plotch/a"), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("plotch"), RETVAL == 0);  TEST_EXPECT_CONDITION(close(fd), RETVAL == 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(mkdir("this is ", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(mkdir("this is / a long path", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(mkdir("this is / a long path/tothe", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(mkdir("this is / a long path/tothe/destination ", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(mkdir("this is / a long path/tothe/destination / directory", S_IRWXALL), RETVAL == 0);  TEST_EXPECT_CONDITION(fd = open("this is / a long path/tothe/destination / directory/a", O_RDWR | O_CREAT, S_IRWXALL),			RETVAL == 24);  TEST_EXPECT_CONDITION(rmdir("this is / a long path/tothe/destination / directory"), RETVAL < 0);  TEST_EXPECT_CONDITION(unlink("this is / a long path/tothe/destination / directory/a"), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("this is / a long path/tothe/destination / directory"), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("this is / a long path/tothe/destination / directory/"), RETVAL < 0);  TEST_EXPECT_CONDITION(rmdir("this is / a long path/tothe/destination "), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("this is / a long path/tothe/"), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("this is / a long path"), RETVAL == 0);  TEST_EXPECT_CONDITION(rmdir("this is "), RETVAL == 0);  TEST_EXPECT_CONDITION(close(fd), RETVAL == 0);  ls("/", 1, 1);  /*   * Unlink/link files while they are in use   */  TEST_EXPECT_CONDITION(fd = open("toto8.txt", O_RDWR | O_CREAT,				  S_IRUSR | S_IWUSR),			RETVAL == 24);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(link("toto8.txt", "toto9.txt"), RETVAL == 0);  TEST_EXPECT_CONDITION(unlink("toto8.txt"), RETVAL == 0);  ls("/", 1, 1);  strzcpy(buff, "Garbage garbage garbage", 256);  TEST_EXPECT_CONDITION(len = read(fd, buff, 256), RETVAL == 0);  TEST_EXPECT_CONDITION(lseek(fd, 0, SEEK_SET), RETVAL == 0);    strzcpy(buff, "Hello world from toto8", 256);  TEST_EXPECT_CONDITION(len = write(fd, buff, 24), RETVAL == 24);  TEST_EXPECT_CONDITION(lseek(fd, 0, SEEK_SET), RETVAL == 0);    strzcpy(buff, "Garbage garbage garbage", 256);  TEST_EXPECT_CONDITION(len = read(fd, buff, 256), RETVAL == 24);  bochs_printf("read s='%s'\n", buff);  TEST_EXPECT_CONDITION(fd = open("toto8.txt", O_RDWR), RETVAL < 0);  TEST_EXPECT_CONDITION(fd = open("toto9.txt", O_RDWR), RETVAL == 25);  strzcpy(buff, "Garbage garbage garbage", 256);  TEST_EXPECT_CONDITION(len = read(fd, buff, 256), RETVAL == 24);  bochs_printf("read s='%s'\n", buff);  TEST_EXPECT_CONDITION(unlink("toto9.txt"), RETVAL == 0);  ls("/", 1, 1);  /*   * Rename files while they are in use   */  TEST_EXPECT_CONDITION(fd = open("toto8.txt", O_RDWR | O_CREAT,				  S_IRUSR | S_IWUSR),			RETVAL == 26);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(rename("toto8.txt", "toto9.txt"), RETVAL == 0);  ls("/", 1, 1);  strzcpy(buff, "Garbage garbage garbage", 256);  TEST_EXPECT_CONDITION(len = read(fd, buff, 256), RETVAL == 0);  TEST_EXPECT_CONDITION(lseek(fd, 0, SEEK_SET), RETVAL == 0);    strzcpy(buff, "Hello world from toto8", 256);  TEST_EXPECT_CONDITION(len = write(fd, buff, 24), RETVAL == 24);  TEST_EXPECT_CONDITION(lseek(fd, 0, SEEK_SET), RETVAL == 0);    strzcpy(buff, "Garbage garbage garbage", 256);  TEST_EXPECT_CONDITION(len = read(fd, buff, 256), RETVAL == 24);  bochs_printf("read s='%s'\n", buff);  TEST_EXPECT_CONDITION(close(fd), RETVAL == 0);  TEST_EXPECT_CONDITION(fd = open("toto8.txt", O_RDWR), RETVAL < 0);  TEST_EXPECT_CONDITION(fd = open("toto9.txt", O_RDWR), RETVAL == 26);  strzcpy(buff, "Garbage garbage garbage", 256);  TEST_EXPECT_CONDITION(len = read(fd, buff, 256), RETVAL == 24);  bochs_printf("read s='%s'\n", buff);  TEST_EXPECT_CONDITION(unlink("toto9.txt"), RETVAL == 0);  TEST_EXPECT_CONDITION(close(fd), RETVAL == 0);  /* Rename */  ls("/", 1, 1);  TEST_EXPECT_CONDITION(rename("/mnt/subdir0", "subdir42"), RETVAL == 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(rename("titi1.txt", "subdir42"), RETVAL < 0);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(rename("titi1.txt", "subdir42/titi.txt"), RETVAL == 0);  /* Rename a dir being used */  TEST_EXPECT_CONDITION(chdir("subdir42"), RETVAL == 0);  ls(".", 1, 1);  ls("..", 1, 1);  ls("/", 1, 1);  TEST_EXPECT_CONDITION(rename("../subdir42", "../subdir000"), RETVAL == 0);  ls(".", 1, 1);  ls("/", 1, 1);  ls("..", 1, 1);  /*   * test mmap   */  /* Common use: shared file suppressed as soon as possible */  TEST_EXPECT_CONDITION(fd = open("mmap.txt", O_RDWR | O_CREAT,				  S_IRUSR | S_IWUSR),			RETVAL == 26);  if (fork() == 0)    {      char *shrd;      TEST_EXPECT_CONDITION(shrd = mmap(NULL, 4096, PROT_READ | PROT_WRITE,					MAP_SHARED, fd, 4096),			    shrd != NULL);      nanosleep(1, 0);      strzcpy(shrd, "Hello1 from the child (shared mapping) !", 4096);      return 0;    }  else    {      char *shrd;      TEST_EXPECT_CONDITION(shrd = mmap(NULL, 4096, PROT_READ | PROT_WRITE,					MAP_SHARED, fd, 4096),			    shrd != NULL);      strzcpy(shrd, "Garbage garbage garbage", 256);      nanosleep(2, 0);      bochs_printf("Father woken up\n");      bochs_printf("Read string from child: '%s'\n", shrd);      TEST_EXPECT_CONDITION(strcmp(shrd, "Hello1 from the child (shared mapping) !"),			    RETVAL == 0);      munmap(shrd, 8192);    }  ls("/", 1, 1);  TEST_EXPECT_CONDITION(unlink("mmap.txt"), RETVAL == 0);  ls("/", 1, 1);  /* Common use: shared file suppressed as soon as possible */  TEST_EXPECT_CONDITION(fd = open("mmap.txt", O_RDWR | O_CREAT,				  S_IRUSR | S_IWUSR),			RETVAL == 27);  TEST_EXPECT_CONDITION(unlink("mmap.txt"), RETVAL == 0);  if (fork() == 0)    {      char *shrd;      TEST_EXPECT_CONDITION(shrd = mmap(NULL, 4096, PROT_READ | PROT_WRITE,					MAP_SHARED, fd, 4096),			    shrd != NULL);      nanosleep(1, 0);      strzcpy(shrd, "Hello2 from the child (shared mapping) !", 4096);      return 0;    }  else    {      char *shrd;      TEST_EXPECT_CONDITION(shrd = mmap(NULL, 4096, PROT_READ | PROT_WRITE,					MAP_SHARED, fd, 4096),			    shrd != NULL);      strzcpy(shrd, "Garbage garbage garbage", 256);      nanosleep(2, 0);      bochs_printf("Father woken up\n");      bochs_printf("Read string from child: '%s'\n", shrd);      TEST_EXPECT_CONDITION(strcmp(shrd, "Hello2 from the child (shared mapping) !"),			    RETVAL == 0);    }  ls("/", 1, 1);  /* Basic use */  TEST_EXPECT_CONDITION(creat("mmap.txt", S_IRWXALL), RETVAL == 0);  if (fork() == 0)    {      char *shrd;      TEST_EXPECT_CONDITION(fd = open("mmap.txt", O_RDWR | O_CREAT,				      S_IRUSR | S_IWUSR),			    RETVAL == 28);      TEST_EXPECT_CONDITION(shrd = mmap(NULL, 4096, PROT_READ | PROT_WRITE,					MAP_SHARED, fd, 4096),			    shrd != NULL);      nanosleep(1, 0);      strzcpy(shrd, "Hello3 from the child (shared mapping) !", 4096);      return 0;    }  else    {      char *shrd;      TEST_EXPECT_CONDITION(fd = open("mmap.txt", O_RDWR | O_CREAT,				      S_IRUSR | S_IWUSR),			    RETVAL == 28);      TEST_EXPECT_CONDITION(shrd = mmap(NULL, 4096, PROT_READ | PROT_WRITE,					MAP_SHARED, fd, 4096),			    shrd != NULL);      strzcpy(shrd, "Garbage garbage garbage", 256);      nanosleep(2, 0);      bochs_printf("Father woken up\n");      bochs_printf("Read string from child: '%s'\n", shrd);      TEST_EXPECT_CONDITION(strcmp(shrd, "Hello3 from the child (shared mapping) !"),			    RETVAL == 0);    }  ls("/", 1, 1);    bochs_printf("Bye from fstest\n");  ls("/", 1, 1);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -