繁体   English   中英

有人可以帮我解释一下为什么以下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,因此它仍然位于文件的开头,因此您再次读取了文件的第一个字符

read(fd3, &c3, 1);

由于fd3等于dup2之后的fd2,因此您在调用read(fd2, &c2, 1);时已经用它read(fd2, &c2, 1);了文件的第一个字符read(fd2, &c2, 1); 所以现在它读取文件中的第二个字符。

这就是为什么前两个相同的原因,因为它们是文件中的第一个字符,而第三个是不同的,因为它是文件中的第二个字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM