。接下来,我们把标准输出关闭,printf就不会输出,如果用dup复制原来的fd,那么新dup出来的fd就是1(对应标准输出)
之后标准输出的内容都会被写入到原来fd对应的那个文件
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char const *argv[]) {
int fd = -1;
fd = open( "ghostwu2.txt", O_RDWR );
if ( -1 == fd ) {
perror( "open" );
return -1;
}else {
printf( "文件打开成功fd=%d\n", fd );
}
//fd=0 对应stdin fd=1 对应 stdout fd=2 对应stderror
close( 1 ); //关闭fd=1的标准输出之后,printf输出看不见
int newFd = -1;
newFd = dup( fd ); //newFd一定是1, 因为分配后的fd从最小的没被占用的开始
char buf[3];
sprintf( buf, "%d", newFd ); //newFd转字符串型
printf( "这是一段输出,由于newFd和fd关联到标准输出(newFd=1),会被写入到文件\n" );
write( fd, buf, 1 );
return 0;
}