天天看點

利用dup和dup2在linux中實作簡單的重定向輸出

Linux中檔案描述符 0代表标準輸入檔案stdin、1代表标準輸出檔案stdout、2代表标準錯誤輸出檔案stderr,STDOUT_FILENO是一個宏 為1

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
int main()
{
    int fd_new,fd_old,fd_c;
    fd_c = open("test.txt",O_CREAT | O_RDWR,0664);
    if(-1 == fd_c)
        exit(1);
    fd_old = dup(STDOUT_FILENO);
    //将STDOUT_FILENO的檔案描述符所指向的内容複制一份給fd_old
    dup2(fd_c,STDOUT_FILENO);
    //将STDOUT_FILENO複制一份給fd_c
    close(fd_c);
    //關閉 計數将減1
    printf("hello");
    fflush(stdout);
    write(STDOUT_FILENO,"ojbk",4);
    dup2(STDOUT_FILENO,fd_old);
    //恢複回來
    close(fd_old);
    return 0;
}
           

主要是利用dup和dup2實作輸出重定向