文件描述符


  • 系统调用中操作IO的函数,都是针对文件描述符的
  • 通过文件描述符可以直接对相应的文件进行操作
  • 如:open,close,write,read,ioctl等

linux系统调用函数(C语言):open,close函数和文件描述符_函数调用

linux系统调用函数(C语言):open,close函数和文件描述符_文件描述符_02

文件IO与标准IO的权限对比

linux系统调用函数(C语言):open,close函数和文件描述符_代码示例_03

open函数

linux系统调用函数(C语言):open,close函数和文件描述符_代码示例_04

linux系统调用函数(C语言):open,close函数和文件描述符_函数调用_05

linux系统调用函数(C语言):open,close函数和文件描述符_代码示例_06

运行结果:

linux系统调用函数(C语言):open,close函数和文件描述符_文件描述符_07


  • 为什么文件描述符fd为3?
  • 因为0,1,2是标准IO输入/输出/错误输出给占用了,一个进程被创建都会默认有这三个文件描述符。
  • 如果函数调用失败,文件描述符将为-1.

linux系统调用函数(C语言):open,close函数和文件描述符_函数调用_08

函数调用出错打印错误信息

linux系统调用函数(C语言):open,close函数和文件描述符_函数调用_09

man perror

linux系统调用函数(C语言):open,close函数和文件描述符_函数调用_10

  • 代码示例

linux系统调用函数(C语言):open,close函数和文件描述符_代码示例_11

  • ​errno-base.h​​头文件是专门保存错误码对应的描述信息的

linux系统调用函数(C语言):open,close函数和文件描述符_文件描述符_12

linux系统调用函数(C语言):open,close函数和文件描述符_文件描述符_13

  • 使用​​perror​​函数可以增加错误提示,以及给出错误描述,更贴切些

linux系统调用函数(C语言):open,close函数和文件描述符_文件描述符_14

linux系统调用函数(C语言):open,close函数和文件描述符_函数调用_15

​​close​​函数

linux系统调用函数(C语言):open,close函数和文件描述符_函数调用_16

  • 代码示例

linux系统调用函数(C语言):open,close函数和文件描述符_文件描述符_17

  • 一个程序运行的时候最多可以创建1024个文件描述符

linux系统调用函数(C语言):open,close函数和文件描述符_文件描述符_18