-
Wilke Pierre authoredWilke Pierre authored
rwtest.c 1.17 KiB
#include "kernel/param.h"
#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
#include "kernel/fs.h"
#include "kernel/fcntl.h"
#include "kernel/syscall.h"
#include "kernel/memlayout.h"
#include "kernel/riscv.h"
int
main(int argc, char** argv)
{
char *a;
int fd, n;
char s[] = "rwtest";
a = sbrk(PGSIZE);
fd = open("sbrk", O_CREATE|O_WRONLY);
if(fd < 0) {
printf("%s: open sbrk failed\n", s);
exit(1);
}
if ((n = write(fd, a, PGSIZE)) < 0) {
printf("%s: write sbrk failed\n", s);
exit(1);
}
close(fd);
a = sbrk(PGSIZE);
fd = open("sbrk", O_RDONLY);
if(fd < 0) {
printf("%s: open sbrk failed\n", s);
exit(1);
}
if ((n = read(fd, a, PGSIZE)) < 0) {
printf("%s: read sbrk failed\n", s);
exit(1);
}
close(fd);
unlink("sbrk");
a = sbrk(2*PGSIZE);
a[PGSIZE-5] = 'H';
a[PGSIZE-4] = 'A';
a[PGSIZE-3] = 'H';
a[PGSIZE-2] = 'A';
a[PGSIZE-1] = '!';
char** uargv = (char**)a;
uargv[0] = &a[20];
uargv[1] = &a[PGSIZE-5];
uargv[2] = 0;
a[30] = 'e';
a[31] = 'c';
a[32] = 'h';
a[33] = 'o';
a[34] = '\0';
exec("echo", uargv);
printf("This should never be displayed.\n");
exit(0);
}