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) 表示断开文件描述符的文件指向;

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

  • 相关阅读:
    ios 开发证书制作
    iOS UILable 高度自适
    asp 中创建日志打印文件夹
    ios iphone、ipad启动画面尺寸
    ios 更改UITableview中Section的字体颜色
    Azure Blob 存储简介
    java追加文件
    java读取文件
    DNS原理及其解析过程
    单点登录原理与简单实现
  • 原文地址:https://www.cnblogs.com/vsignsoft/p/10836985.html
Copyright © 2011-2022 走看看