**<1>.dup实际上,调用dup(oldfd)等效于,fcntl(oldfd, F_DUPFD, 0)。
<2>.dup2(oldfd, newfd)等效于,close(oldfd);fcntl(oldfd, F_DUPFD, newfd);请参考 fcntl() 在进程间通信时可用来改变进程的标准输入和标准输出。
文件描述符的赋值是文件描述符表结构体成员中指针的复制。**
通过对 open 函数的理解,可见文件描述符是一个小整数
执行以下代码,看看你能发现什么:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int fd0 = open ("./log.txt", O_WRONLY | O_CREAT , 0644);
int fd1 = open ("./log.txt", O_WRONLY | O_CREAT , 0644);
int fd2 = open ("./log.txt", O_WRONLY | O_CREAT , 0644);
int fd3 = open ("./log.txt", O_WRONLY | O_CREAT , 0644);
printf(“fd0: %d\n”,fd0);
printf(“fd1: %d\n”,fd1);
printf(“fd2: %d\n”,fd2);
printf(“fd3: %d\n”,fd3);
close(fd0);
close(fd1);