有人能帮我解释一下为什么下面的 C 程序(系统调用)有这种输出吗?
Can someone help me explain why the following C program(system calls) has this kind of output?
这是我的程序:
我对此感到困惑。我不明白为什么 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;
}
调用dup2后,fd2等同于fd3,所以发生的情况是:
read(fd1, &c1, 1);
您读取了文件的第一个字符
read(fd2, &c2, 1);
由于fd2是独立于fd1的,所以还是在文件的开头,所以再读一遍文件的第1个字符
read(fd3, &c3, 1);
由于 fd3 等同于 dup2 之后的 fd2,您在调用 read(fd2, &c2, 1);
时已经用它读取了文件的第一个字符,所以现在它读取文件中的第二个字符。
这就是前两个相同的原因,因为它们是文件中的第一个字符,而第三个不同,因为它是文件中的第二个字符。
这是我的程序: 我对此感到困惑。我不明白为什么 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;
}
调用dup2后,fd2等同于fd3,所以发生的情况是:
read(fd1, &c1, 1);
您读取了文件的第一个字符
read(fd2, &c2, 1);
由于fd2是独立于fd1的,所以还是在文件的开头,所以再读一遍文件的第1个字符
read(fd3, &c3, 1);
由于 fd3 等同于 dup2 之后的 fd2,您在调用 read(fd2, &c2, 1);
时已经用它读取了文件的第一个字符,所以现在它读取文件中的第二个字符。
这就是前两个相同的原因,因为它们是文件中的第一个字符,而第三个不同,因为它是文件中的第二个字符。