gpt4 book ai didi

c - 为什么你会复制一个文件描述符并且从不使用它?

转载 作者:行者123 更新时间:2023-12-01 12:38:01 25 4
gpt4 key购买 nike

这是部分:

extern fin;
char line[64];

if (argc<2 || ttyn(0)!='x') {
write(1, "goto error\n", 11);
seek(0, 0, 2);
return;
}
seek(0, 0, 0);
fin = dup(0);

请注意,在整个代码中,“fin”仅出现在上面的部分。 那么为什么要复制 std 输入 (在本例中是一个文件/脚本), 将其存储在 fin 中并且从不使用它?

你可以在这里找到完整的代码 http://v6shell.org/history/goto.c这里有语法高亮 http://pastebin.com/uAvANLdR

附言。这是K&R-C。此处描述了使用的命令 dup:http://man.cat-v.org/unix-6th/2/dup

更新:我发现,命令 getchar 实际上需要它。看这里http://man.cat-v.org/unix-6th/3/getchar

但我仍然不明白您为什么需要它。现在有人能告诉我吗?

最佳答案

如果您查看 getchar(3) 的手册页

http://man.cat-v.org/unix-6th/3/getchar

有这个小块说明:

Associated with this routine is an external variable called fin, which is a structure containing a buffer such as described under getc (III).

所以如果我们仔细看看 getc(3)

http://man.cat-v.org/unix-6th/3/getc

我们看到:

struct buf {
int fildes; /* File descriptor */
int nleft; /* Chars left in buffer */
char *nextp; /* Ptr to next character */
char buff[512]; /* The buffer */
};

goto.c 中的代码现在通过告诉编译器“fin”是 int 类型来进行修改。实际上“fin”的类型为 struct buf,但为“int filedes;”是代码执行的结构的第一个成员,实际上与:

extern struct buf fin;

...

seek(0, 0, 0);
fin.fildes = dup(0);

正如我所说,这是一个 hacky 解决方案,但代码看起来相当陈旧,其中包含所有 goto。

关于c - 为什么你会复制一个文件描述符并且从不使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27789608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com