c - FILE * 和 int value fd 之间有什么区别/关系?

标签 c io

我注意到在 C 语言中,文件 I/O 依赖于文件描述符。然而,在一些标准库函数中,如 write(int fd, xxxx),文件描述符似乎是一个整数,而在其他一些函数中,如 fseek(FILE *stream, xxxx) 它被表示为一个指针。

int 的值 fd 和 FILE * 是否相同?为什么C语言会留下这样的差异?

(我试图找到类似的问题但失败了,尽管我的问题似乎是初步的)

最佳答案

Are int valued fd and FILE * the same?

没有。他们不是。

文件描述符是一个 intFILE * 是一个文件指针。主要区别在于后者有缓冲,而前者没有。

文件指针 (FILE*) 通常包含有关流的更多信息,例如当前位置、文件结束标记、流上的错误等。但是文件描述符只是一个正整数,表示一个"file"(可以是管道、套接字或任何其他流)。

您可以使用 fileno() 从文件指针获取文件描述符:

int fd = fileno(fp);

关于c - FILE * 和 int value fd 之间有什么区别/关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090163/

相关文章:

c - C/Cython 中的动态类型转换

c - C 中的 mqtt 给出错误 -1

java - 为什么我收到 "Exception in thread "main"java.lang.NumberFormat : null. . ."after clicking the "cancel"按钮?

haskell - 从 IO ExitCode monad 获取字符串

c - 访问函数返回的结构元素时遇到问题 - 取消引用指向不完整类型的指针

c - 条件未正确执行

点对点聊天中程序的多个实例之间的通信 - C 语言

io - 在 FreeBSD 上查找具有大量磁盘 I/O 的进程

java - 如何从txt中读取行?

c# - 在 C# 中处理文件时确定缓冲区大小?