dup 函数学习

上个Java项目告一段落了,继续linux c 编程的学习,因为最近的工作和文件操作打交道的比较多,所以,最先就从文件操作开始了。
看到dup和dup2两个函数的时候,按照网上看到的,就有了下面的一段代码:
个人对下面代码的简单解释:
1.fd 为打开文件时返回的文件标识符 因为0,1,2三个已经被系统默认占用,所以,fd为3;
2.再次dup一个标准输出,返回当前可以返回的最小值4;<!--more-->
3.将文件标识符用标准输出替代了,也就时当前的标准输出就是somefile文件。
4.和3差不多,又一次换回来了。

 1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <fcntl.h>
4 #include <sys/types.h>
5 #include <sys/stat.h>
6 #include <string.h>
7 #include <unistd.h>
8
9 int main()
10 {
11 int fd,save_fd;
12 char msg[] = "This is a test\n";
13 fd = open("somefile",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
14 printf("1.%d\n",fd);
15 if(fd<0)
16 {
17 perror("open");
18 exit(1);
19 }
20 save_fd = dup(STDOUT_FILENO);
21 printf("2.%d\n",save_fd);
22 int fd2 = dup2(fd,STDOUT_FILENO);
23 close(fd);
24 printf("3.%d\n",fd2);
25 write(STDOUT_FILENO,msg,strlen(msg));
26 int fd3 = dup2(save_fd,STDOUT_FILENO);
27 printf("4.%d\n",fd3);
28 write(STDOUT_FILENO,msg,strlen(msg));
29 close(save_fd);
30 return 0;
31 }



你可能感兴趣的:(dup)