复制文件描述符的三种方法:
(1)dup函数:从0开始搜索空闲的文件描述符
(2)dup2函数:强制复制,不管文件描述符是否正在使用状态
(3)fcntl函数:从fd_start开始搜索空闲的文件描述符
fcntl(fd,F_DUPFD,fd_start);
以下代码示例是:
把标准输出重定向到新的文件描述符fd1中,当printf函数调用时,即把内容输入到发fd1文件描述符中及test2.txt中
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#define ERR_EXIT(m) \
do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0)
int main(int argc, char *argv[])
{
int fd;
fd = open("test.txt", O_WRONLY);
if (fd == -1)
ERR_EXIT("open error");
/*
close(1);
dup(fd);
*/
/*
dup2(fd, 1);
*/
close(1);
if (fcntl(fd, F_DUPFD, 0) < 0)
ERR_EXIT("dup fd error");
printf("hello\n");
return 0;
}
以上可实现重定向的功能:类似ls >>aa的功能