int main(){ int fd; fd = dup2(1, 9); printf("The result by dup2 is %d\n", fd); fd = mydup2(2, 5); printf("The result by mydup2 is %d\n", fd); return 0; }
int main(void) { int fd = -1; fd = mydup2(0,10); if(fd < 0) { perror("mydup2"); return -1; } printf("fd = %d\n",fd); return 0; }
int main(int argc, char *argv[]) { int fd1, fd2; if (argc != 2) { err_quit("Usage: %s file", argv[0]); } if ((fd1 = open(argv[1], O_RDONLY)) < 0) { err_sys("Can't open file `%s`", argv[1]); } fd2 = mydup2(fd1, 42); lseek(fd1, 0, SEEK_END); check_fd(fd1); check_fd(fd2); }
int mydup2(int oldfd, int newfd) { int tfd; if (newfd < 0) return -1; if (newfd == oldfd) return newfd; close(newfd); if ((tfd == dup(oldfd)) == newfd) { return newfd; } else { mydup2(oldfd, newfd); clsose(tfd); } return newfd; }
int main(void){ printf("%d\n", mydup2(0, 99)); // printf("%d, %d, %d", mydup2(5, 10), mydup2(5, 4), mydup2(5, 1)); return 1; }