Linux:文件描述符的复制与重定向

文件描述符的复制和重定向

(1)概述

文件描述符的复制

创建一个新的文件描述符,该文件描述符指向旧文件描述符所指向的文件

文件描述符的重定向

对已有的文件描述符所指向的文件进行”重新绑定"

(2)dup

该函数用于对文件描述符的复制,复制得到的文件描述符和原文件描述符同指向一个文件(或设备)

#include <unistd.h>
int fdNew = dup(fdOld);
  • fdOld:被复制的文件描述符
  • return:调用成功则返回的文件描述符;-1表示复制失败

注意:fdNew是新创建出来的文件描述符,这是区别于文件描述符重定向的主要矛盾

(2)dup2

该函数可以实现文件描述符的复制,也可以实现文件描述符的创建

#include <unistd.h>
int dup2(int fd_old, int fd_new);
  • fd_old:被复制文件描述符或重定向的目标文件描述符
  • fd_new:同样接管fd_old所指向的文件的文件描述符,当fd_new没有接管文件时,该函数用于复制文件描述符;当fd_new已经接管了某一个文件时,该函数用于重定向文件描述符
  • return:成功则返回新的文件描述符,失败返回-1

(3)fcntl

该函数可以实现多种功能:文件描述符的复制、获取文件属性、设置文件属性等

#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd, ...);
  • fd:要操作的文件描述符
  • cmd:功能参数(F_DUPFD:复制一个已经存在的文件描述符);(F_GETFL:获取文件的状态);(F_SETFL:设置文件的状态)
  • return:F_DUPFD则返回复制出来的文件描述符;F_GETFL则返回文件的属性信息;F_SETFL对应返回非负数则成功,负数表示失败

举例:设置文件的状态标志

// 得到文件的flag属性
int iFlag = fcntl(fd, F_GETFL);
// 添加新的flag 标志
iFlag = iFlag | O_APPEND;
// 将更新后的falg设置给文件
fcntl(fd, F_SETFL, iFlag );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值