更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
fd_table.h 文件参考

浏览源代码.

结构体

struct  file_table_s
 进程fd <--> 系统FD绑定 sysFd的默认值是-1 更多...
 
struct  fd_table_s
 进程fd表结构体 更多...
 
struct  files_struct
 

类型定义

typedef struct ProcessCB LosProcessCB
 

函数

void files_refer (int fd)
 
int files_close_internal (int fd, LosProcessCB *processCB)
 
struct files_structdup_fd (struct files_struct *oldf)
 复制FD 更多...
 
struct files_structalloc_files (void)
 为进程分配文件管理器,其中包含fd总数,(0,1,2)默认给了stdin,stdout,stderr 更多...
 
void delete_files (struct files_struct *files)
 删除参数进程的文件管理器 更多...
 
struct files_structcreate_files_snapshot (const struct files_struct *oldf)
 创建文件管理器快照,所谓快照就是一份拷贝 更多...
 
void delete_files_snapshot (struct files_struct *files)
 删除文件管理器快照 更多...
 
int alloc_fd (int minfd)
 分配一个系统fd,从全局tg_filelist中拿sysFd 更多...
 
void alloc_std_fd (struct fd_table_s *fdt)
 
void FileTableLock (struct fd_table_s *fdt)
 对进程文件表操作上锁 更多...
 
void FileTableUnLock (struct fd_table_s *fdt)
 对进程文件表操作解锁 更多...
 
struct fd_table_sGetFdTable (void)
 获取进程文件描述符表 更多...
 

类型定义说明

◆ LosProcessCB

typedef struct ProcessCB LosProcessCB

在文件 fd_table.h105 行定义.

函数说明

◆ alloc_fd()

int alloc_fd ( int  minfd)

分配一个系统fd,从全局tg_filelist中拿sysFd

这是这个函数的调用关系图:

◆ alloc_files()

struct files_struct * alloc_files ( void  )

为进程分配文件管理器,其中包含fd总数,(0,1,2)默认给了stdin,stdout,stderr

这是这个函数的调用关系图:

◆ alloc_std_fd()

void alloc_std_fd ( struct fd_table_s fdt)

◆ create_files_snapshot()

struct files_struct * create_files_snapshot ( const struct files_struct oldf)

创建文件管理器快照,所谓快照就是一份拷贝

这是这个函数的调用关系图:

◆ delete_files()

void delete_files ( struct files_struct files)

删除参数进程的文件管理器

这是这个函数的调用关系图:

◆ delete_files_snapshot()

void delete_files_snapshot ( struct files_struct files)

删除文件管理器快照

这是这个函数的调用关系图:

◆ dup_fd()

struct files_struct * dup_fd ( struct files_struct oldf)

复制FD

这是这个函数的调用关系图:

◆ files_close_internal()

int files_close_internal ( int  fd,
LosProcessCB processCB 
)
这是这个函数的调用关系图:

◆ files_refer()

void files_refer ( int  fd)
这是这个函数的调用关系图:

◆ FileTableLock()

void FileTableLock ( struct fd_table_s fdt)

对进程文件表操作上锁

在文件 vfs_procfd.c40 行定义.

41{
42 /* Take the semaphore (perhaps waiting) */
43 while (sem_wait(&fdt->ft_sem) != 0) {
44 /*
45 * The only case that an error should occur here is if the wait was
46 * awakened by a signal.
47 */
48 LOS_ASSERT(errno == EINTR);
49 }
50}
int sem_wait(sem_t *sem)
获取信号量
Definition: semaphore.c:77
sem_t ft_sem
Definition: fd_table.h:89
函数调用图:
这是这个函数的调用关系图:

◆ FileTableUnLock()

void FileTableUnLock ( struct fd_table_s fdt)

对进程文件表操作解锁

在文件 vfs_procfd.c52 行定义.

53{
54 int ret = sem_post(&fdt->ft_sem);
55 if (ret == -1) {
56 PRINTK("sem_post error, errno %d \n", get_errno());
57 }
58}
int sem_post(sem_t *sem)
增加信号量计数
Definition: semaphore.c:139
函数调用图:
这是这个函数的调用关系图:

◆ GetFdTable()

struct fd_table_s * GetFdTable ( void  )

获取进程文件描述符表

在文件 vfs_procfd.c77 行定义.

78{
79 struct fd_table_s *fdt = NULL;
80 struct files_struct *procFiles = OsCurrProcessGet()->files;//当前进程文件管理器
81
82 if (procFiles == NULL) {
83 return NULL;
84 }
85
86 fdt = procFiles->fdt;//进程文件表
87 if ((fdt == NULL) || (fdt->ft_fds == NULL)) {
88 return NULL;
89 }
90
91 return fdt;
92}
STATIC INLINE LosProcessCB * OsCurrProcessGet(VOID)
struct files_struct * files
进程fd表结构体
Definition: fd_table.h:84
struct file_table_s * ft_fds
Definition: fd_table.h:86
struct fd_table_s * fdt
持有的文件表
Definition: fd_table.h:95
函数调用图:
这是这个函数的调用关系图: