输入输出重定向&dup、dup2

一、输入输出重定向

输入重定向:将文件导入指定命令中
输出重定向:将原本输出打开屏幕上数据信息写入到文件当中

标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可以从其他文件或者命令中输入
标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕

标准输出重定向符号
1“>”将标准输出重定向到指定文件中(清空原有数据)
2“>>”将标准输出重定向到指定文件中(追加到原有数据后面)

下面以>为例
1.首先用touch创建一个空白文件夹readme.txt
2.用运行date>readme.txt 将原本应该显示在屏幕上的内容写入到readme.txt中
在这里插入图片描述

二、dup与dup2

dup创建一个文件描述符的副本,但是新的fd(file descriptor)不可以被指定,默认为最小的没有被使用的文件描述符,dup2与dup相同可以创建一个文件描述符的副本,并且可以指定具体的文件描述符。

dup与dup2的函数原型如下:

 int dup(int oldfd);
 int dup2(int oldfd, int newfd);

失败返回-1
成功返回新fd
注意:dup和dup2创建的文件描述符并不继承原fd的属性

案例:
本案例将首先利用open函数打开一个文件,然后利用dup2将STDOUT重定向到打开的文件,然后调用printf,这时printf打印的内容就会输入到打开的文件当中。

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>

int main(int argc,char*argv[])
{
  int fd=open("./duptest.txt",O_RDWR|O_CREAT);  //打开一个文件 
  if(fd==-1)
  {
    perror("open error\n");
  }

  int newfd=dup2(fd,STDOUT_FILENO);//将文件描述符STDOUT_FIEN重定向到fd中,这样输出到屏幕的内容就会写入fd指向的文件中
  if(newfd==-1)
  {
    perror("dup2 error\n");
  }

  printf("------输入到屏幕------\n");  //原本应该是打印在屏幕上,但是现在运行程序不会显示在屏幕上,而是写入./duptest.txt这个文件当中

  close(fd);
  return 0;

}

从下图可以看出运行上面代码后屏幕上没有任何输出,但是我们查看duptest.txt这个文件,文件的内容就是原本我们要输出到屏幕上的内容。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值