《朱老师物联网大讲堂》学习笔记
学习地址:www.zhulaoshi.org
文件描述符的复制,
int dup(int oldfd);
int dup2(int oldfd, int newfd );
RETURN VALUE
On success, these system calls return the new descriptor. On error, -1
is returned, and errno is set appropriately.
dup返回的fd和原来的oldfd都指向原来fd打开的那个动态文件,
实际上,这就构成了一个文件共享,
使用dup的缺陷,不能指定返回fd数字,
小实验,
使用close和dup,
重定位printf的标准输出到某个文件,
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define FILENAME "1.txt"
int main(void)
{
int fd1 = -1, fd2 = -1;
fd1 = open(FILENAME, O_RDWR | O_CREAT | O_TRUNC, 0644);
if (fd1 < 0)
{
perror("open");
return -1;
}
printf("fd1 = %d.\n", fd1);
close(1); // 1就是标准输出stdout
// 复制文件描述符
fd2 = dup(fd1); // fd2一定等于1,因为前面刚刚关闭了1,这句话就把
// 1.txt文件和标准输出就绑定起来了,所以以后输出到标准输出的信息就
// 可以到1.txt中查看了。
printf("fd2 = %d.\n", fd2);
printf("this is for test");
close(fd1);
return -1;
}