文件描述符

文件描述符

每个进程在Linux内核中都有一个进程控制块结构体(task_struct),task_struct 中有一个指针 struct files_struct *files 指向文件描述符表(一个数组),这个表中的每一个元素指向一个已经打开的文件指针(struct file)。

  struct files_struct
  {
  atomic_t count; //引用计数   累加
  struct fdtable *fdt;
  struct fdtable fdtab;
  spinlock_t file_lock ____cacheline_aligned_in_smp;
  int next_fd; 
  struct embedded_fd_set close_on_exec_init; 
  struct embedded_fd_set open_fds_init; 
  struct file * fd_array[NR_OPEN_DEFAULT]; //文件描述符数组
  };
struct file
{
	mode_t f_mode;          	  //表示文件是否可读或可写,FMODE_READ或FMODE_WRITE
	dev_ t  f_rdev ;        	  // 用于/dev/tty
	off_t  f_ops;           	  //当前文件位移
	unsigned short f_flags;	     //文件标志,O_RDONLY,O_NONBLOCK和O_SYNC
	unsigned short f_count;		 //打开的文件数目
	unsigned short f_reada;
	struct inode *f_inode;        //指向inode的结构指针
	struct file_operations *f_op; //文件操作索引指针
}

用户程序不能直接访问内核中的文件描述符表,而只能使用文件描述符表的索引(即0、1、2等数字),这些索引被称为文件描述符。

APP打开文件时,内核会从文件描述符表中挑选一个最小的未被使用的数字返回。

0、1、2 这三个文件描述符当进程被创建时,就被系统所占用了。(0、1、2:标准输入、标准输出、标准错误)

image-20240527201915814

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值