思路:
对于dup2用fd2参数指定新描述符的值,如果fd2已经打开,则现将其关闭。如果fd等于fd2,返回fd2,而不关闭它。
#include "apue.h"
int my_dup(int fd1, int newfd);
int main(int argc, char *argv[])
{
char buffer[] = "asdasfaff";
printf("请输入新文件描述符:\n");
int val;
scanf("%d", &val);
my_dup(STDOUT_FILENO, val);
if (write(val, buffer, strlen(buffer)) == -1)
{
err_sys("write error");
exit(-1);
}
printf("\nSuccess!");
exit(0);
}
int my_dup(int fd1, int newfd)
{
int temp_fd;
if (newfd < 0)
err_sys("不合法的文件描述符!");
if (fd1 == newfd)
return newfd;
close(newfd);
while(1)
{
temp_fd = dup(fd1);
if (newfd == temp_fd)
{
return newfd;
}
}
}