#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/mman.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
" o open(O_RDONLY)\n"
" O open(O_CREAT|O_RDWR)\n"
" u unlink\n"
+" U munmap\n"
" m mknod\n"
+" M mmap to EOF (must open and stat prior)\n"
" c close\n"
" _ wait for signal\n"
+" R reference entire mmap-ed region\n"
" s stat\n"
" S fstat\n";
{
char *fname, *commands;
struct stat st;
+ size_t mmap_len, i;
+ unsigned char *mmap_ptr = NULL, junk = 0;
int fd;
if (argc != 3) {
exit(1);
}
break;
+ case 'M':
+ mmap_len = st.st_size;
+ mmap_ptr = mmap(NULL, mmap_len, PROT_READ, MAP_SHARED,
+ fd, 0);
+ if (mmap_ptr == MAP_FAILED) {
+ perror("mmap");
+ exit(1);
+ }
+ break;
case 'u':
if (unlink(fname) == -1) {
perror("unlink");
case '_':
pause();
break;
+ case 'R':
+ for (i = 0; i < mmap_len && mmap_ptr; i += 4096)
+ junk += mmap_ptr[i];
+ break;
case 's':
if (stat(fname, &st) == -1) {
perror("stat");
exit(1);
}
break;
+ case 'U':
+ if (munmap(mmap_ptr, mmap_len)) {
+ perror("munmap");
+ exit(1);
+ }
+ break;
default:
fprintf(stderr, "unknown command \"%c\"\n", *commands);
fprintf(stderr, usage, argv[0]);