这是我的计划: 我很困惑。我不明白为什么c1和c2共享相同的值,但c3的值与c1和c2的不同?有人可以帮我解释一下吗?谢谢。这是程序:
#include <stdio.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int fd1, fd2, fd3;
char c1, c2, c3;
char *fname = argv[1];
fd1 = open(fname, O_RDONLY, 0);
fd2 = open(fname, O_RDONLY, 0);
fd3 = open(fname, O_RDONLY, 0);
dup2(fd2, fd3);
read(fd1, &c1, 1);
read(fd2, &c2, 1);
read(fd3, &c3, 1);
printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3);
return 0;
}
答案 0 :(得分:2)
调用dup2后,fd2相当于fd3,所以会发生什么:
read(fd1, &c1, 1);
您阅读了文件的第一个字符
read(fd2, &c2, 1);
由于fd2独立于fd1,它仍然位于文件的开头,因此您再次读取该文件的第一个字符
read(fd3, &c3, 1);
由于fd3相当于dup2之后的fd2,所以当你调用read(fd2, &c2, 1);
时,你已经用它读取了文件的第一个字符,所以它现在读取文件中的第二个字符。
这就是为什么前两个是相同的,因为它们是文件中的第一个字符,第三个是不同的,因为它是文件中的第二个字符。