文件描述符和文件指针有什么区别?
问题描述:
可能重复:
What's the difference between a file descriptor and file pointer?文件描述符和文件指针有什么区别?
如果我打开文件是这样的:
FILE *fp = fopen("mr32.txr","r");
然后fp
是文件指针或文件描述符?他们之间有什么区别?
答
FP是一个文件指针
文件指针:
- 它是高级接口
- 传递给的fread()和fwrite()函数
- 包括缓冲,错误指示和EOF检测等。
- 提供更高的便携性和效率。
文件描述符:
- 低/内核级别的处理程序
- 过时阅读()和write()UNIX系统调用
- 不包括缓冲和这样的功能
- 便携性较差,效率不高
基于此link
答
这是一个指向FILE
结构的指针,如果这就是你要求的。文件描述符是一个整数。结构及其相关的API是C标准的一部分。文件描述符及其相关功能不是。在实践中,你可以交替使用任何一组函数,尽管在这里和那里的默认行为有一些显着的差异。您可以阅读手册页以确定哪些功能采用哪种参数。在具有文件描述符的系统上,通常可以使用fdopen(3)
函数从打开的文件描述符中获取FILE
结构,并通过fileno(3)
转换为其他方式。
答
FILE
是一个包含有关文件信息的结构,包括文件描述符。
值得注意的是FILE是一个不透明的指针(它指向的内存对于使用该接口的代码没有意义)。还值得注意的是,POSIX open返回一个文件描述符。 –
值得注意的是,'fdopen' *创建一个新的* FILE对象(需要关闭,关闭时文件描述符也关闭),而'fileno'只是*返回现有的*文件描述符'FILE'。 –