36#ifdef LOSCFG_NET_LWIP_SACK
48 LOS_ASSERT(errno == EINTR);
56 PRINTK(
"sem_post error, errno %d \n", get_errno());
68 for (
int i = minFd; i < fdt->
max_fds; i++) {
82 if (procFiles == NULL) {
99 if ((procFd < 0) || (procFd >=
fdt->
max_fds)) {
178 if (FD_ISSET(procFd, fdt->
proc_fds)) {
220 if (procFd >= MIN_START_FD) {
242 if (minFd < MIN_START_FD) {
243 minFd = MIN_START_FD;
249 if (procFd == VFS_ERROR) {
270 if (minFd < MIN_START_FD) {
271 minFd = MIN_START_FD;
277 if (procFd == VFS_ERROR) {
312 if ((sysFd > STDERR_FILENO) && (sysFd < CONFIG_NFILE_DESCRIPTORS)) {
315#if defined(LOSCFG_NET_LWIP_SACK)
316 if ((sysFd >= CONFIG_NFILE_DESCRIPTORS) && (sysFd < (CONFIG_NFILE_DESCRIPTORS + CONFIG_NSOCKET_DESCRIPTORS))) {
320#if defined(LOSCFG_COMPAT_POSIX)
321 if ((sysFd >= MQUEUE_FD_OFFSET) && (sysFd < (MQUEUE_FD_OFFSET + CONFIG_NQUEUE_DESCRIPTORS))) {
327static void FdClose(
int sysFd,
unsigned int targetPid)
331 if ((sysFd > STDERR_FILENO) && (sysFd < CONFIG_NFILE_DESCRIPTORS)) {
333 SCHEDULER_LOCK(intSave);
335 SCHEDULER_UNLOCK(intSave);
338 SCHEDULER_UNLOCK(intSave);
342#if defined(LOSCFG_NET_LWIP_SACK)
343 if ((sysFd >= CONFIG_NFILE_DESCRIPTORS) && (sysFd < (CONFIG_NFILE_DESCRIPTORS + CONFIG_NSOCKET_DESCRIPTORS))) {
347#if defined(LOSCFG_COMPAT_POSIX)
348 if ((sysFd >= MQUEUE_FD_OFFSET) && (sysFd < (MQUEUE_FD_OFFSET + CONFIG_NQUEUE_DESCRIPTORS))) {
360 SCHEDULER_LOCK(intSave);
362 SCHEDULER_UNLOCK(intSave);
366 procFiles = processCB->
files;
367 if (procFiles == NULL || procFiles->
fdt == NULL) {
368 SCHEDULER_UNLOCK(intSave);
373 SCHEDULER_UNLOCK(intSave);
375 return procFiles->
fdt;
380#if !defined(LOSCFG_NET_LWIP_SACK) && !defined(LOSCFG_COMPAT_POSIX) && !defined(LOSCFG_FS_VFS)
388 if (OS_PID_CHECK_INVALID(targetPid)) {
399 if (fdt == NULL || fdt->
ft_fds == NULL) {
414 PRINT_ERR(
"sem_post error, errno %d \n", get_errno());
424 PRINTK(
"sem_post error, errno %d \n", get_errno());
433#if !defined(LOSCFG_NET_LWIP_SACK) && !defined(LOSCFG_COMPAT_POSIX) && !defined(LOSCFG_FS_VFS)
440 if (OS_PID_CHECK_INVALID(targetPid)) {
445 if (fdt == NULL || fdt->
ft_fds == NULL) {
457 PRINTK(
"sem_post error, errno %d \n", get_errno());
465 PRINTK(
"sem_post error, errno %d \n", get_errno());
475 PRINTK(
"sem_post error, errno %d \n", get_errno());
int alloc_fd(int minfd)
分配一个系统fd,从全局tg_filelist中拿sysFd
int files_close_internal(int fd, LosProcessCB *processCB)
int mq_close(mqd_t personal)
STATIC INLINE BOOL OsProcessIsInactive(const LosProcessCB *processCB)
进程不活跃函数定义:身上贴有不使用且不活跃标签的进程
STATIC INLINE LosProcessCB * OsCurrProcessGet(VOID)
void MqueueRefer(int sysFd)
int sem_post(sem_t *sem)
增加信号量计数
int sem_wait(sem_t *sem)
获取信号量
int socks_close(int sockfd)
void socks_refer(int sockfd)
struct files_struct * files
struct file_table_s * ft_fds
unsigned int max_fds
进程的文件描述符最多有256个
fd_set * proc_fds
进程fd管理位,用bitmap管理FD使用情况,默认打开了 0,1,2 (stdin,stdout,stderr)
struct fd_table_s * fdt
持有的文件表
static void FdRefer(int sysFd)
进程FD引用数改变
int AllocAndAssocProcessFd(int sysFd, int minFd)
分配和绑定进程描述符
int CheckProcessFd(int procFd)
struct fd_table_s * GetFdTable(void)
获取进程文件描述符表
int AllocLowestProcessFd(int minFd)
分配文件描述符,从3号开始
void FileTableLock(struct fd_table_s *fdt)
对进程文件表操作上锁
void AssociateSystemFd(int procFd, int sysFd)
参数进程FD和参数系统FD进行绑定(关联)
void FreeProcessFd(int procFd)
释放进程文件描述符
int DisassociateProcessFd(int procFd)
解绑系统文件描述符,返回系统文件描述符
static struct fd_table_s * GetProcessFTable(unsigned int pid, sem_t *semId)
获取参数进程FD表
static void FdClose(int sysFd, unsigned int targetPid)
关闭FD
int AllocAndAssocSystemFd(int procFd, int minFd)
分配和绑定系统描述符
static int AssignProcessFd(const struct fd_table_s *fdt, int minFd)
分配进程描述符
int CopyFdToProc(int fd, unsigned int targetPid)
拷贝一个进程FD给指定的进程,使两个进程的FD都指向同一个系统FD
int AllocProcessFd(void)
分配文件描述符
int AllocSpecifiedProcessFd(int procFd)
int GetAssociatedSystemFd(int procFd)
获取绑定的系统描述符
int CloseProcFd(int procFd, unsigned int targetPid)
关闭进程FD
void FileTableUnLock(struct fd_table_s *fdt)
对进程文件表操作解锁
static bool IsValidProcessFd(struct fd_table_s *fdt, int procFd)