1、看看函数原型 fcntl是管理文件描述符的 fd contrl,多功能工具箱
fcntl是一个多功能工具箱,fd文件描述符,CMD要进行的命令,变参是传递参数的配合cmd用的,F_xxx都是cmd
不同的cmd作用是不一样的,学习的时候没必要把所有的全记住,只需要弄明白一个作为示例就可以了,其他的用哪个查哪个,查man手册即可,我们第一次一定是看别人的,9分模仿1分创新
F_DUPFD复制文件描述符的,类似dup/dup2 返回>= arg的文件描述符
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define FILENAME "a.txt"
int main(void)
{
int fd1 = -1, fd2 = -1;
fd1 = open(FILENAME, O_RDWR | O_CREAT | O_TRUNC, 0644);
//close(1);
printf("fd1 = %d.\n", fd1);
fd2 = fcntl(fd1, F_DUPFD, 14);
printf("fd2 = %d.\n", fd2);
while(1)
{
write(fd1, "aa", 2);
sleep(1);
write(fd2, "bb", 2);
}
close(fd1);
return 0;
}
比dup2要智能要好用,因为newfd占用着则智能再分配