int dup(int oldfd); // 复制文件描述符,返回值和 oldfd 指向同一文件,共享文件指针 int dup2(int oldfd, int newfd); // 重定向文件描述符,关闭 newfd 指向的文件,然后 newfd 指向 oldfd 指向的文件,返回 newfd1、dup(oldfd)
/* #include <unistd.h> int dup(int oldfd); 作用:复制一个新的文件描述符 fd=3, int fd1 = dup(fd), fd指向的是a.txt, fd1也是指向a.txt 从空闲的文件描述符表中找一个最小的,作为新的拷贝的文件描述符 */ #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> int main() { int fd = open("a.txt", O_RDWR | O_CREAT, 0664); int fd1 = dup(fd);//让fd1和fd都指向a.txt if(fd1 == -1) { perror("dup"); return -1; } printf("fd : %d , fd1 : %d\n", fd, fd1); close(fd); char * str = "hello,world"; int ret = write(fd1, str, strlen(str));//把字符串写到fd1中 if(ret == -1) { perror("write"); return -1; } close(fd1);//关闭fd1 return 0; }2、int dup2(int oldfd, int newfd);
// 重定向文件描述符,关闭 newfd 指向的文件,然后 newfd 指向 oldfd 指向的文件,返回 newfd/* #include <unistd.h> int dup2(int oldfd, int newfd); 作用:重定向文件描述符 oldfd 指向 a.txt, newfd 指向 b.txt 调用函数成功后:newfd 和 b.txt 做close, newfd 指向了 a.txt oldfd 必须是一个有效的文件描述符 oldfd和newfd值相同,相当于什么都没有做 */ #include <unistd.h> #include <stdio.h> #include <string.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> int main() { int fd = open("1.txt", O_RDWR | O_CREAT, 0664); if(fd == -1) { perror("open"); return -1; } int fd1 = open("2.txt", O_RDWR | O_CREAT, 0664); if(fd1 == -1) { perror("open"); return -1; } printf("fd : %d, fd1 : %d\n", fd, fd1); int fd2 = dup2(fd, fd1);//这时fd和fd1都指向了----fd指向的 -----“1.txt” if(fd2 == -1) { perror("dup2"); return -1; } // 通过fd1去写数据,实际操作的是1.txt,而不是2.txt char * str = "hello, dup2"; int len = write(fd1, str, strlen(str)); if(len == -1) { perror("write"); return -1; } printf("fd : %d, fd1 : %d, fd2 : %d\n", fd, fd1, fd2); close(fd); close(fd1); return 0; }
webserver|1.29dup、dup2函数
最新推荐文章于 2025-11-24 16:52:22 发布
文章详细介绍了Linux系统中的dup和dup2函数,这两个函数用于复制和重定向文件描述符。dup使得新旧文件描述符指向同一文件,而dup2则可以关闭原有newfd指向的文件并使其指向oldfd所指文件。示例代码展示了如何在程序中使用这两个函数进行文件操作。
527

被折叠的 条评论
为什么被折叠?



