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

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

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

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

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

open函数

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

linux系统调用函数(C语言):open,close函数和文件描述符_Linux_06
运行结果:
linux系统调用函数(C语言):open,close函数和文件描述符_Linux_07

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

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

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

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

man perror

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

  • 代码示例

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

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

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

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

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

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

close函数

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

  • 代码示例

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

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

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