Linux_dup、dup2函数

发布于:2023-09-14 ⋅ 阅读:(136) ⋅ 点赞:(0)

1.dup1

#include <unistd.h>

       int dup(int oldfd);

       作用:复制一个新的文件描述符

       从空闲的文件描述符表中,找一个最小的,作为新的拷贝的文件描述符

       指向的文件和旧的文件描述符是一样的

       int dup2(int oldfd, int newfd);

#include <unistd.h>
#include<stdio.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<string.h>
int main() {
    int fd = open("a.txt", O_RDWR | O_CREAT, 0664);
    int fd1 = dup(fd);
    if(fd1 == -1) {
        perror("dup");
        return -1;
    }
    printf("fd: %d, fd : %d\n", fd, fd1);
    close(fd);
    char* str = "Hello world";
    int ret = write(fd1, str, strlen(str));
    if(ret == -1) {
        perror("write");
        return -1;
    }
    close(fd1);
    return 0;
}

2.dup2

#include <unistd.h>

    int dup2(int oldfd, int newfd);

    作用:重定向文件描述符

    oldfd必须是一个有效的文件描述符

    oldfd和newfd值相同,相当于什么都没有做

#include <unistd.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.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);
    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;
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到