文件描述符和文件指针有什么区别?

5
如果我这样打开文件:

可能有重复:
文件描述符和文件指针有什么区别?

如果我像这样打开文件:

FILE *fp = fopen("mr32.txr","r");

那么fp是文件指针还是文件描述符?它们之间有什么区别吗?
3个回答

4

如果你询问的是文件描述符,它是指向FILE结构体的指针。文件描述符是一个整数。FILE结构体及其相关API是C标准的一部分,而文件描述符及其相关函数则不是。实际上,你可以互换地使用这两组函数,但是在某些默认行为上有明显的差异。你可以阅读手册来了解哪些函数需要哪些参数类型。对于具有文件描述符的系统,你通常可以使用fdopen(3)函数从打开的文件描述符中获取一个FILE结构体,并使用fileno(3)函数进行反向转换。


值得注意的是,FILE 是一个不透明指针(它所指向的内存对于使用接口的代码来说是无意义的)。同样值得注意的是,POSIX open 返回一个文件描述符。 - John Chadwick
值得注意的是,fdopen创建一个新的 FILE对象(需要关闭,并在关闭时也关闭文件描述符),而fileno仅仅是返回现有的底层FILE文件描述符。 - R.. GitHub STOP HELPING ICE

4

fp是FILE指针

文件指针:

  1. 它是高级接口
  2. 传递给fread()和fwrite()函数
  3. 包括缓冲、错误指示和EOF检测等功能。
  4. 提供更高的可移植性和效率。

文件描述符:

  1. 低/内核级处理程序
  2. 传递给UNIX系统调用的read()和write()
  3. 不包括缓冲区和其他功能
  4. 可移植性较差,缺乏效率

基于此链接


2

FILE 是一个结构体,包含有关文件的信息,包括文件描述符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接