zoukankan      html  css  js  c++  java
  • 编程实现文件重定向

    文件重定向涉及关键函数:

    int dup(fd) - 新建文件描述符,指向 fd 所指向的文件;

    int dup2(fd1, fd2) - fd2 指向 fd1 指向的文件,若fd2事先已经指向某文件,会自动断开指向;

    举例:

    重定向标准输出,到一个指定的文件。

    代码:

    几个标准文件描述符:

    标准输入 0

    标准输出 1

    标准错误 2

     1 #include <stdio.h>
     2 #include <unistd.h>
     3 #include <sys/types.h>
     4 #include <sys/stat.h>
     5 #include <fcntl.h>
     6 #include <string.h>
     7 
     8 int main(int argc, char **argv)
     9 {
    10         printf("before file redirect
    "); // 输出到屏幕
    11         char buf[] = "before before
    ";
    12         write(1, buf, strlen(buf)); // 输出到屏幕
    13 
    14         int fd_stdout_bak = dup(1);
    15         int fd_file = creat("file.dat", 0777);
    16         int fd = dup2(fd_file, 1); // 1 指向 file.dat
    17         printf("after file redirect, %s - %s
    ", argv[0], argv[1]); // 输出到文件 file.dat
    18         char buf1[] = "after after
    ";
    19         write(1, buf1, strlen(buf1)); // 输出到文件 file.dat
    20 
    21         dup2(fd_stdout_bak, 1);
    22         printf("after restore stdout file
    "); // 恢复输出到屏幕
    23         char buf2[] = "restore restore
    ";
    24         write(1, buf2, strlen(buf2)); // 恢复输出到屏幕
    25 
    26         close(fd_stdout_bak);
    27         close(fd_file);
    28 
    29         return 0;
    30 }

    问题:

    在执行标准输出重定向前,一定要先调用 printf 函数,

    若不调用此函数,则重定向失败;

    原因不明!

    总结:

    文件描述符是指向打开的文件;

    不同的文件描述符可以指向同一个文件;

    int close(int fd) 表示断开文件描述符的文件指向;

    总之,文件描述符类似指针;

  • 相关阅读:
    js精度丢失问题处理
    button居中
    js存储 cookie,localStorage,sessionStorage的比较
    js 常用的DOM,BOM操作
    js事件代理理解
    oneplus前端开发面试
    instanceof
    js原型和原型链
    js构造函数
    NC 6.X笔记(编辑中)
  • 原文地址:https://www.cnblogs.com/vsignsoft/p/10836985.html
Copyright © 2011-2022 走看看