首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

dup and dup2的剖解

2012-09-24 
dup and dup2的剖析#include unistd.h#include sys/stat.h#include fcntl.h#include stdio.h#incl

dup and dup2的剖析

#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <string.h> int main(void){int fd, save_fd;char msg[] = "This is a test\n";fd = open("somefile", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);if(fd<0) {perror("open");exit(1);}save_fd = dup(STDOUT_FILENO);dup2(fd, STDOUT_FILENO);close(fd);write(STDOUT_FILENO, msg, strlen(msg));dup2(save_fd, STDOUT_FILENO);write(STDOUT_FILENO, msg, strlen(msg));close(save_fd);return 0;}?
dup and dup2的剖解?

重点解释两个地方:

  • 第3幅图,要执行dup2(fd, 1);,文件描述符1原本指向tty,现在要指向新的文件somefile,就把原来的关闭了,但是tty这个文件原本有两个引用计数,还有文件描述符save_fd也指向它,所以只是将引用计数减1,并不真的关闭文件。

  • 第5幅图,要执行dup2(save_fd, 1);,文件描述符1原本指向somefile,现在要指向新的文件tty,就把原来的关闭了,somefile原本只有一个引用计数,所以这次减到0,是真的关闭了。