zvfs: 完成open/close/read/write/unlink的hook动态库代码编写、编译与简单功能测试。
This commit is contained in:
32
func_test.c
32
func_test.c
@@ -1,40 +1,48 @@
|
||||
#define _GNU_SOURCE
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *path = "/zvfs/func_test.dat";
|
||||
if (argc > 2 && strcmp(argv[1], "-f") == 0) path = argv[2];
|
||||
setenv("ZVFS_ROOT", "/zvfs", 0);
|
||||
|
||||
printf("open: %s\n", path);
|
||||
int fd = open(path, O_CREAT|O_RDWR, 0644);
|
||||
int fd = open(path, O_CREAT | O_RDWR | O_TRUNC, 0644);
|
||||
if (fd < 0) { perror("open"); return 1; }
|
||||
|
||||
const char *msg = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
const char *msg = "ABCDEFGHIJKL";
|
||||
ssize_t w = write(fd, msg, strlen(msg));
|
||||
if (w < 0) { perror("write"); return 2; }
|
||||
printf("write: %zd\n", w);
|
||||
|
||||
/* Rewind by closing and reopening for read */
|
||||
const char *msg2 = "MNOPQRSTUVWXYZ";
|
||||
ssize_t w2 = write(fd, msg2, strlen(msg2));
|
||||
if (w2 < 0) { perror("write"); return 2; }
|
||||
printf("write: %zd\n", w2);
|
||||
|
||||
close(fd);
|
||||
|
||||
|
||||
fd = open(path, O_RDONLY);
|
||||
if (fd < 0) { perror("open R"); return 3; }
|
||||
|
||||
char buf[256]; memset(buf, 0, sizeof(buf));
|
||||
char buf[10];
|
||||
memset(buf, 0, sizeof(buf));
|
||||
ssize_t r = read(fd, buf, sizeof(buf));
|
||||
if (r < 0) { perror("read"); return 4; }
|
||||
printf("read: %zd bytes: %.*s\n", r, (int)r, buf);
|
||||
|
||||
char buf2[512];
|
||||
memset(buf2, 0, sizeof(buf2));
|
||||
ssize_t r2 = read(fd, buf2, sizeof(buf2));
|
||||
if (r2 < 0) { perror("read"); return 4; }
|
||||
printf("read: %zd bytes: %.*s\n", r2, (int)r2, buf2);
|
||||
|
||||
close(fd);
|
||||
|
||||
if (unlink(path) != 0) { perror("unlink"); return 5; }
|
||||
printf("unlink: ok\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user