dup()、dup2()

dup和dup2()的用法

dupdup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。

#include 
int dup(int newfd);
int dup2(int newfd, int oldfd);
      
下面用一个简单的例子解释两个函数的用法和区别:
#include 
#include 
#include 
#include 
#include 
#include 

 int main(void)
 {
     int fd, save_fd;
     char msg[] = "This is a test of dup() & dup2()\n";
     int test;
     fd = open("somefile", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
     if(fd<0) {
         perror("open");
         exit(1);
     }
     save_fd = dup(STDOUT_FILENO);            //运行后save_fd指向STDOUT——FILENO,即save_fd指向标准输出
     printf("save_fd=%d\n",save_fd);                  //测试用
     test=dup2(fd, STDOUT_FILENO);             //运行后STDOUT_FILENO指向fd所指向的文件,即STDOUT_FILENO指向somefile
     printf("dup2_1=%d\n",test);     //测试用 此时的标准输出不再指向显示器,因此该段测试将写入somefile文件中
     close(fd);
     write(STDOUT_FILENO, msg, strlen(msg));      //此时STDOUT_FILENO所指向的是somefile文件不再是标准输出流,因此该段将
                                                          //写入somefile文件中
     test=dup2(save_fd, STDOUT_FILENO);          //运行后STDOUT_FILENO指向save_fd所指向的文件,即标准输出流
     printf("dup2_2=%d\n",test);     //测试用 此时标准输出流重新指回显示器,因此该段测试将写入显示器
     write(STDOUT_FILENO, msg, strlen(msg));        //此时STDOUT_FILENO所指向的便回标准输出流该段将写入显示器
     close(save_fd);
     return 0;
 }
该程序运行后显示器上显示的内容为:
[crosslandy@localhost PIPE]$ ./dup_example 
save_fd=4
dup2_2=1
This is a test
somefile文件内的内容为:
dup2_1=1
This is a test


注:本例子转自他人


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部