我注意到在 C 语言中,文件 I/O 依赖于文件描述符。然而,在一些标准库函数中,如 write(int fd, xxxx)
,文件描述符似乎是一个整数,而在其他一些函数中,如 fseek(FILE *stream, xxxx)
它被表示为一个指针。
int
的值 fd 和 FILE *
是否相同?为什么C语言会留下这样的差异?
(我试图找到类似的问题但失败了,尽管我的问题似乎是初步的)
最佳答案
Are int valued fd and FILE * the same?
没有。他们不是。
文件描述符是一个 int
而 FILE *
是一个文件指针。主要区别在于后者有缓冲,而前者没有。
文件指针 (FILE*
) 通常包含有关流的更多信息,例如当前位置、文件结束标记、流上的错误等。但是文件描述符只是一个正整数,表示一个"file"(可以是管道、套接字或任何其他流)。
您可以使用 fileno()
从文件指针获取文件描述符:
int fd = fileno(fp);
关于c - FILE * 和 int value fd 之间有什么区别/关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31090163/