gpt4 book ai didi

c - 同一个文件描述符 fd 上的多个 fdopen()?

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:52 26 4
gpt4 key购买 nike

我正在尝试了解标准 I/O。我遇到了调用 fdopen() 的问题。

如果我按如下方式在同一个文件描述符上调用 fdopen(),会有什么行为?为什么我得到 '\377' (-1) 的输出?

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main()
{

int fd1, fd2;
char c;

FILE *fp1, *fp2;

fd1 = open("foo.txt", O_RDONLY, 0);
fp1 = fdopen(fd1, "r");
fp2 = fdopen(fd1, "r");

if (fp2 == NULL)
printf("NULL\n");

if (errno)
printf("ERROR\n");

c = fgetc(fp1);
c = fgetc(fp2);

printf("c = %c\n", c);


exit(0);
}

最佳答案

假设您的 stdio 缓冲区大小为 4K。第一个 fgetc 将 4K 读入缓冲区并返回第一个字节。 fd 现在在文件中前进了 4K。第二个 fgetc 从那里读取。您的文件小于缓冲区大小,因此您处于 EOF。您使用 %c 打印 EOF 并得到一个有趣的字符。

在单个fd 上的多个fdopen 得到不要尝试的投票;它会伤害我。如果您正在编写 getty,则从单个 tty 描述符创建 stdinstdoutstderr 除外.

关于c - 同一个文件描述符 fd 上的多个 fdopen()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23139615/

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