- if (argc < 4 || argc > 5) {
- printf("Usage: %s file seek nr_blocks [blocksize]\n", argv[0]);
- return 1;
- }
-
- seek_blocks = strtoul(argv[2], 0, 0);
- blocks = strtoul(argv[3], 0, 0);
-
- fd = open(argv[1], O_LARGEFILE | O_DIRECT | O_RDWR | O_CREAT, 0644);
- if (fd == -1) {
- printf("Cannot open %s: %s\n", argv[1], strerror(errno));
- return 1;
- }
-
- if (argc == 5)
- st.st_blksize = strtoul(argv[4], 0, 0);
- else if (fstat64(fd, &st) < 0) {
- printf("Cannot stat %s: %s\n", argv[1], strerror(errno));
- return 1;
- }
-
- fprintf(stderr, "directio on %s for %dx%lu bytes \n", argv[1], blocks,
- st.st_blksize);
-
- seek = (off64_t)seek_blocks * (off64_t)st.st_blksize;
-#if 0
- if (lseek64(fd, seek, SEEK_SET) < 0) {
- printf("lseek64 failed: %s\n", strerror(errno));
- return 1;
- }
-#endif
- len = blocks * st.st_blksize;
- wbuf = mmap(0, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, 0, 0);
- if (wbuf == MAP_FAILED) {
- printf("No memory %s\n", strerror(errno));
- return 1;
- }
-
- rbuf = mmap(0, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, 0, 0);
- if (rbuf == MAP_FAILED) {
- printf("No memory %s\n", strerror(errno));