示例#1
0
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;
}
示例#2
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;
}