文件描述符的复制——实现输出重定向

dup(2)   dup2(2)

#include <unistd.h>
int dup(int oldfd);
功能:复制文件描述符
参数:
oldfd:指定源文件的描述符
返回值:
错误 -1 errno被设置
成功 返回新的文件描述符

新的文件描述符使用未使用的、最小的文件描述符

int dup2(int oldfd, int newfd);
功能:复制文件描述符
参数:
oldfd:源描述符
newfd:目的描述符
返回值:
错误 -1 errno被设置
成功 返回新的文件描述符

 1 //利用dup和dup2完成输出重定向
 2 #include <stdio.h>
 3 #include <sys/types.h>
 4 #include <sys/stat.h>
 5 #include <fcntl.h>
 6 #include <unistd.h>
 7 #include <string.h>
 8 int main(int argc,char *argv[]){
 9     char *msg="I am test...\n";
10     int flags=O_WRONLY|O_CREAT|O_TRUNC;
11     //打开文件,将标准输出重定向到这个文件。argv[1]
12     int fd=open(argv[1],flags,0644);//fd 3
13     if(fd==-1){
14         perror("open");
15         return -1;
16     }
17     int s_fd=dup(1);//s_fd  4 保存现场
18
19     dup2(3,1);//将文件的描述符定位到标准输出上
20     //关闭文件描述符
21     close(fd);
22     //向标准输出,输出字符串,内容输出到了文件里
23     write(1,msg,strlen(msg));
24     //恢复现场
25     close(1);
26     dup(s_fd);
27     close(s_fd);
28     //输出到显示器
29     write(1,msg,strlen(msg));
30     return 0;
31 }

原文地址:https://www.cnblogs.com/qiuyuwutong/p/9349841.html

时间: 2024-10-25 03:11:38

文件描述符的复制——实现输出重定向的相关文章

Linux系统编程--文件描述符的复制dup()和dup2()【转】

本文转载自:http://blog.csdn.net/tennysonsky/article/details/45870459 dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件. 这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个钥匙开一把锁,相当于,一个文件描述符对应一个文件,现在,我们去配钥匙,通过旧的钥匙复制了一把新的钥匙,这样的话,旧的钥匙和新的钥匙都能开启这把锁.对比于 d

Linux系统编程——文件描述符的复制:dup()和dup2()

dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件. 这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当于文件,本来一个钥匙开一把锁,相当于,一个文件描述符对应一个文件,现在,我们去配钥匙,通过旧的钥匙复制了一把新的钥匙,这样的话,旧的钥匙和新的钥匙都能开启这把锁.对比于 dup(), dup2() 也一样,通过原来的文件描述符复制出一个新的文件描述符,这样的话,原来的文件描述符和新的文件描述符都指向

IO重定向与文件描述符

1.介绍 IO重定向用于捕捉一个文件,命令,程序,脚本或者代码块的输出,然后把捕捉到的输出作为输入发送给另外一个文件,命令,程序或脚本. 终端程序一般从单一源以流的形式聚集输入和显示输出,script执行时(进程), 系统会默认开启3个标准文件,stdin, stdout,stderr . script默认会由stdin读取数据,默认指键盘,由stdout输出执行结果,默认指屏幕; 若有错误发生,则由stderr显示信息,默认也指向屏幕.系统开启这3个文件时,以文件代码(分别为0,1,2)作为连

18 shell 重定向以及文件描述符

1.对重定向的理解 2.硬件设备和文件描述符 文件描述符到底是什么 3.Linux Shell 输出重定向 4.Linux Shell 输入重定向 5.结合Linux文件描述符谈重定向 6.Shell 对文件描述符的操作 7.改变当前shell环境的重定向目标 8.示例 1.对重定向的理解 Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向:从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思. 输入方向就是数据从哪里流向程序.标准输入方向是指数据从键盘流向程序,

shell 重定向以及文件描述符

1.对重定向的理解 Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向:从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思. 输入方向就是数据从哪里流向程序.标准输入方向是指数据从键盘流向程序,如果改变了它的方向,数据就从其它地方流入,这就是输入重定向. 输出方向就是数据从程序流向哪里.标准输出方向是指数据从程序流向显示器,如果改变了它的方向,数据就流向其它地方,这就是输出重定向. 2.硬件设备和文件描述符 计算机的硬件设备有很多,常见的输入设备有键盘.鼠标.麦

shell 重定向与文件描述符

[解释] 重定向: 是动作,一种操作的action行为 文件描述符: 名词,文件的另一种表示,linux一切皆文件. [基础重定向形式] < 输入重定向 用途星级: ** << here-document  输入重定向 用途星级: *** > 输出重定向 用途星级: ***** >> 追加 用途星级: ***** 一.< 用法: cat 作为代表 cat功能:Concatenate FILE(s), or standard input, to standard o

基于文件描述符的文件操作(非缓冲)

1.1. 文件描述符:内核为每个进程维护一个已打开文件的记录表,文件描述符是一个较小的正整数(0-1023),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文件操作函数,就可以实现对文件的读.写.创建.删除等操作.常用基于文件描述符的函数有open(打开).creat(创建).close(关闭).read(读取).write(写入).ftruncate(改变文件大小).lseek(定位).fsync(同步).fstat(获取文件状态).fchmod(权限).flock(加锁).fcnt

五、基于文件描述符的文件操作(非缓冲)

1文件描述符 内核为每个进程维护一个已打开文件的记录表,文件描述符是一个较小的正整数(0—1023),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文件操作函数,就可以实现对文件的读.写.创建.删除等操作. 常用基于文件描述符的函数有open(打开).creat(创建).close(关闭).read(读取).write(写入).ftruncate(改变文件大小).lseek(定位).fsync(同步).fstat(获取文件状态).fchmod(权限).flock(加锁).fcntl(控

exec 操作文件描述符实现IO重定向

1.intruduction exec 用来启动一个新shell来执行指定程序,它会清除现有shell环境,而不是开启子shell来执行命令. exec的另一种作用是操作文件描述符,而此时exec不会覆盖你当前的 shell 环境 2.sysopsis exec 程序/命令 3.exec实现高级IO IO的各种实现离不开对FD的操作,创建新的输入或输出文件描述符后,shell将在脚本退出时自动关闭它们,但有时也需要在脚本结束前手动关闭. 符号 意义 n>&m 将FD为m的输出复制到FD为n的