13 static void fail(const char *what) { perror(what); exit(1); }
15 int main(int argc, char *argv[])
25 for (i = 0; i < argc - 1; i++) {
27 fprintf(stderr, "too many\n");
30 if (sscanf(argv[i + 1], "%d:%d", &fds[i].cur, &fds[i].want) < 2 ||
31 fds[i].cur >= MAXFD) {
32 fprintf(stderr, "bad syntax\n");
37 for (i = 0; i < MAXFD; i++) flag[i] = -1;
38 for (i = 0; i < n; i++) {
41 ino[i] = ino[flag[fd]];
44 if ((fd2 = open(",delete-me",
45 O_WRONLY | O_CREAT | O_EXCL,
50 if (dup2(fd2, fd) < 0) fail("dup2");
53 if (fstat(fd, &st)) fail("fstat");
58 if (mdup(fds, n)) fail("mdup");
60 for (i = 0; i < n; i++) {
62 if (fds[i].want != -1 && fds[i].want != fd) {
63 printf("fd %d[%d] != %d\n", fd, i, fds[i].want);
65 } else if (fstat(fd, &st)) {
66 printf("fstat %d[%d] failed: %s\n", fd, i, strerror(errno));
68 } else if (st.st_ino != ino[i]) {
69 printf("ino %d[%d] wrong\n", fd, i);