📄 multiop.c
字号:
break; case 'L': newfile = POP_ARG(); if (!newfile) newfile = fname; if (link(fname, newfile)) { save_errno = errno; perror("symlink()"); exit(save_errno); } break; case 'm': if (mknod(fname, S_IFREG | 0644, 0) == -1) { save_errno = errno; perror("mknod(S_IFREG|0644, 0)"); exit(save_errno); } break; case 'M': mmap_len = st.st_size; mmap_ptr = mmap(NULL, mmap_len, PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0); if (mmap_ptr == MAP_FAILED) { save_errno = errno; perror("mmap"); exit(save_errno); } break; case 'N': newfile = POP_ARG(); if (!newfile) newfile = fname; if (rename (fname, newfile)) { save_errno = errno; perror("rename()"); exit(save_errno); } break; case 'O': fd = open(fname, O_CREAT|O_RDWR, 0644); if (fd == -1) { save_errno = errno; perror("open(O_RDWR|O_CREAT)"); exit(save_errno); } break; case 'o': len = get_flags(commands+1, &flags); commands += len; fd = open(fname, flags); if (fd == -1) { save_errno = errno; perror("open"); exit(save_errno); } break; case 'r': len = atoi(commands+1); if (len <= 0) len = 1; if (bufsize < len) { buf = realloc(buf, len + ALIGN); if (buf == NULL) { save_errno = errno; perror("allocating buf for read\n"); exit(save_errno); } bufsize = len; buf_align = (char *)((long)(buf + ALIGN) & ~ALIGN); } while (len > 0) { rc = read(fd, buf_align, len); if (rc == -1) { save_errno = errno; perror("read"); exit(save_errno); } if (rc < len) fprintf(stderr, "short read: %u/%u\n", rc, len); len -= rc; } 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) { save_errno = errno; perror("stat"); exit(save_errno); } break; case 'S': if (fstat(fd, &st) == -1) { save_errno = errno; perror("fstat"); exit(save_errno); } break; case 't': if (fchmod(fd, 0) == -1) { save_errno = errno; perror("fchmod"); exit(save_errno); } break; case 'T': len = atoi(commands+1); if (ftruncate(fd, len) == -1) { save_errno = errno; printf("ftruncate (%d,%d)\n", fd, len); perror("ftruncate"); exit(save_errno); } break; case 'u': if (unlink(fname) == -1) { save_errno = errno; perror("unlink"); exit(save_errno); } break; case 'U': if (munmap(mmap_ptr, mmap_len)) { save_errno = errno; perror("munmap"); exit(save_errno); } break; case 'v': verbose = 1; break; case 'w': len = atoi(commands+1); if (len <= 0) len = 1; if (bufsize < len) { buf = realloc(buf, len + ALIGN); if (buf == NULL) { save_errno = errno; perror("allocating buf for write\n"); exit(save_errno); } bufsize = len; buf_align = (char *)((long)(buf + ALIGN) & ~ALIGN); strncpy(buf_align, msg, bufsize); } while (len > 0) { rc = write(fd, buf_align, len); if (rc == -1) { save_errno = errno; perror("write"); exit(save_errno); } if (rc < len) fprintf(stderr, "short write: %u/%u\n", rc, len); len -= rc; } break; case 'W': for (i = 0; i < mmap_len && mmap_ptr; i += 4096) mmap_ptr[i] += junk++; break; case 'y': if (fsync(fd) == -1) { save_errno = errno; perror("fsync"); exit(save_errno); } break; case 'Y': if (fdatasync(fd) == -1) { save_errno = errno; perror("fdatasync"); exit(save_errno); } case 'z': len = atoi(commands+1); if (lseek(fd, len, SEEK_SET) == -1) { save_errno = errno; perror("lseek"); exit(save_errno); } break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': break; default: fprintf(stderr, "unknown command \"%c\"\n", *commands); fprintf(stderr, usage, argv[0]); exit(1); } } if (buf) free(buf); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -