linux dup作用,Linux 下的 dup 和 dup2 函数简介

dup 和 dup2 都可以用来复制一个现存的文件描述符。经常用来重新定向进程的 STDIN, STDOUT, STDERR。

dup 函数

dup 函数定义在 中,函数原形为:

int dup ( int filedes ) ;

函数返回一个新的描述符,这个新的描述符是传给它的描述符的拷贝,若出错则返回 -1。由dup返回的新文件描述符一定是当前可用文件描述符中的最小数值。这函数返回的新文件描述符与参数 filedes 共享同一个文件数据结构。

使用例子:

#include

#include

#include

#include

int main( int argc, char* argv[] ){

int fd= open( "/home/darren/data.dat", O_CREAT| O_RDWR| O_TRUNC, S_IRUSR| S_IWUSR );

if( fd< 0 ){

printf("Open Error!!\n");

return 0;

}

int nfd= dup( fd );

if( nfd< 0 ){

printf("Error!!\n");

return 0;

}

char buf[1000];

int n;

while( (n= read( STDIN_FILENO, buf, 1000 ))> 0 )

if( write( nfd, buf, n )!= n ){

printf("Write Error!!\n");

return 0;

}

return 0;

}

上面代码中,nfd 拷贝了 fd,所以 write ( nfd, buf, n ) 这语句写到 nfd 所代表的文件时也就是写到 fd 所代表的文件。程序执行完后可以在相应的目录的 data.dat 看到输出。

dup2 函数

dup2 函数定义在 中,函数原形为:

int dup2( int filedes, int filedes2 )

同样,函数返回一个新的文件描述符,若出错则返回 -1。与 dup 不同的是,dup2 可以用 filedes2 参数指定新描述符的数值。如果 filedes2 已经打开,则先将其关闭。如若 filedes 等于 filedes2 , 则 dup2 返回 filedes2 , 而不关闭它。同样,返回的新文件描述符与参数 filedes 共享同一个文件数据结构。

使用例子:

#include

#include

#include

#include

int main( int argc, char* argv[] ){

int fd= open( "/home/darren/data.dat", O_CREAT| O_RDWR| O_TRUNC, S_IRUSR| S_IWUSR );

if( fd< 0 ){

printf("Open Error!!\n");

return 0;

}

int nfd= dup2( fd, STDOUT_FILENO );

if( nfd< 0 ){

printf("Error!!\n");

return 0;

}

char buf[1000];

int n;

while( (n= read( STDIN_FILENO, buf, 1000 ))> 0 )

if( write( STDOUT_FILENO, buf, n )!= n ){

printf("Write Error!!\n");

return 0;

}

return 0;

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值