首页 > 编程语言 >网络编程I/O多路复用—动态数组

网络编程I/O多路复用—动态数组

时间:2025-01-13 11:32:22浏览次数:3  
标签:vfd 多路复用 VectorFD int 编程 fd 数组 NULL counter

函数声明
#ifndef __VECTOR_H__
#define __VECTOR_H__

typedef struct{
	int *fd;
	int counter;
	int max_counter;

}VectorFD;

extern VectorFD* create_vector_fd(void);
extern void	 destroy_vector_fd(VectorFD *);
extern int	 get_fd(VectorFD *,int index);
extern int	 mremove(VectorFD *,int fd);
extern void	 add_fd(VectorFD *,int fd);

#endif

函数定义
#include <malloc.h>
#include <assert.h>
#include <stdlib.h>
#include <memory.h>
#include "vector_fd.h"

static void encapacity(VectorFD *vfd){
	if(vfd->counter >= vfd->max_counter){
	int *fds=(int*)calloc(vfd->counter+5,sizeof(int));
	assert(fds!=NULL);
	memcpy(fds,vfd->fd,sizeof(int)*vfd->counter);
	free(vfd->fd);
	vfd->fd=fds;
	vfd->max_counter += 5;

}
}

static int indexof(VectorFD *vfd,int fd){
	int i=0;
	for(;i<vfd->counter;i++){
	if(vfd->fd[i]==fd) return i;
}
	return -1;
}


VectorFD* create_vector_fd(void){
	VectorFD *vfd=(VectorFD*)calloc(1,sizeof(VectorFD));
	assert(vfd!=NULL);
	vfd->fd=(int*)calloc(5,sizeof(int));
	assert(vfd->fd!=NULL);
	vfd->counter=0;
	vfd->max_counter=0;
	return vfd;
}

void	 destroy_vector_fd(VectorFD *vfd){
	assert(vfd!=NULL);
	free(vfd->fd);
	free(vfd);
}

int	 get_fd(VectorFD *vfd,int index){
	assert(vfd!=NULL);
	if(index<0||index>vfd->counter-1)
		return 0;
	return vfd->fd[index];
}

int	 mremove(VectorFD *vfd,int fd){
	assert(vfd!=NULL);
	int index=indexof(vfd,fd);
	if(index==-1) return -1;
	int i=index;
	for(;i<vfd->counter-1;i++){
	vfd->fd[i]=vfd->fd[i+1];
}
	vfd->counter--;
}

void	 add_fd(VectorFD *vfd,int fd){
	assert(vfd!=NULL);
	encapacity(vfd);
	vfd->fd[vfd->counter++]=fd;




}

标签:vfd,多路复用,VectorFD,int,编程,fd,数组,NULL,counter
From: https://blog.csdn.net/m0_57264635/article/details/145111242

相关文章

  • 代码随想录算法训练营第6天 | 哈希表理论基础,242.有效的字母异位词,349. 两个数组的交
    一、刷题部分1.1哈希表理论基础原文链接:代码随想录题目链接:......
  • 子数组最大累加和2
    [Algo]子数组最大累加和21.乘积最大子数组//1.乘积最大子数组//https://leetcode.cn/problems/maximum-product-subarray/intmaxProduct(vector<int>&nums){intn=nums.size();vector<int>dp_min(n),dp_max(n);dp_min[0]=nums[0];dp_max[0]=n......
  • 树状数组【单点修改+区间查询】+二分
    https://codeforces.com/gym/580226/problem/H#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#definelowbit(x)x&(-x)usingll=longlong;usingpii=pair<int,int>;constdoublePI=acos(-1);constintN=2e5......
  • 树状数组【区间修改+单点查询】
    https://www.luogu.com.cn/problem/P3368#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#definelowbit(x)x&(-x)usingll=longlong;usingpii=pair<int,int>;constdoublePI=acos(-1);constintN=5e5+10......
  • 写一个获取数组的最大值、最小值的方法
    在前端开发中,获取数组的最大值和最小值是一个常见的需求。你可以使用JavaScript的Math.max()和Math.min()函数结合扩展运算符(...)来实现这个功能。以下是一个简单的示例:functiongetMaxAndMin(arr){if(!Array.isArray(arr)||arr.length===0){return{max:null,m......
  • 树状数组【模板】
    https://www.luogu.com.cn/problem/P3374#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'#definelowbit(x)x&(-x)usingll=longlong;usingpii=pair<int,int>;constdoublePI=acos(-1);constintN=5e5+10......
  • 使用 CompletableFuture 实现异步编程
    使用CompletableFuture实现异步编程在现代Java开发中,异步编程是一项重要技能。而CompletableFuture是从Java8开始提供的一个功能强大的工具,用于简化异步任务的编写和组合。本文将详细介绍CompletableFuture的基本使用和一些常见的应用场景。1.为什么选择Completab......
  • 从入门到精通:Java 基础语法全解析,快速掌握核心编程技能
    系列文章目录01-从入门到精通:Java基础语法全解析,快速掌握核心编程技能文章目录系列文章目录前言一、Java的基本语法规则1.1Java程序结构1.1.1代码解析1.1.2Java的基本语法规则1.2Java的代码风格和规范二、变量与数据类型2.1变量的定义与使用2.1.1变量的声......
  • 2025 年 1 月 TIOBE 指数,一月头条:Python 是 TIOBE 2024 年度编程语言!
    2025年1月TIOBE指数一月头条:Python是TIOBE2024年度编程语言!编程语言Python赢得了“TIOBE2024年度编程语言”称号。该奖项授予一年内评级增幅最高的编程语言。Python在2024年增长了9.3%。这远远领先于其竞争对手:Java+2.3%、JavaScript+1.4%和Go+1.2%。......
  • 算法-在数组中获取制定值的索引值-php(二分法)
    算法-在数组中获取制定值的索引值-php(二分法)<?php/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@paramnumsint整型一维数组*@paramtargetint整型*@returnint整型*/functionsearch($nums,$target){//......