简要cloud云下载服务器框架

本文介绍了构建一个云下载服务器框架的方法,采用进程池实现高并发和高效率,避免了频繁的子进程创建。服务器支持三种文件传输技术:小火车协议、大货车协议以及sendfile的0拷贝技术,优化了文件传输效率。框架包含头文件、Makefile和源代码,同时提供了客户端的client.c代码,实现了完整的下载服务端和客户端交互流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务器端

构建进程池实现高并发,高效率

不需要重复创建子进程分配任务

子进程有任务执行

无任务阻塞

3种文件传输技术:

小火车协议

大货车

以及sendfile的0拷贝技术

框架:

  1. 头文件

#include <23c.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/time.h>
#include <dirent.h>
#include <sys/stat.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/msg.h>
#include <sys/select.h>
#include <time.h>
#include <syslog.h>
#define __USE_POSIX
#define __USE_XOPEN_EXTENDED
#include <signal.h>
typedef __sighandler_t sighandler_t;
#define __USE_UNIX98
#include <pthread.h>
#include <errno.h>
#include <stdarg.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/ip.h>
#include <netdb.h>
#include <strings.h>
#include <sys/epoll.h>

#include <sys/mman.h>
#include <sys/sendfile.h>

#define ARGS_CHECK(argc, num)                \
    {                                        \
        if (argc != num)                     \
        {                                    \
            fprintf(stderr, "Args error\n"); \
            return -1;                       \
        }                                    \
    }
#define ERROR_CHECK(ret, num, info) \
    {                               \
        if (ret == num)             \
        {                           \
            perror(info);           \
            return -1;              \
        }                           \
    }

#define THREAD_ERROR_CHECK(ret, info)                            \
    {                                                            \
        {                                                        \
            if (ret != 0)                                        \
            {                                                    \
                fprintf(stderr, "%s:%s\n", info, strerror(ret)); \
            }                                                    \
        }                                                        \
    }

#include "head.h"

#include <23c.h>
//在头文件下定义各种数据结构
//workerdata_t 
enum workerStatus{
    FREE,
    BUSY
};
typedef struct workerdata_s
{
    pid_t pid;
    int ststus;
    int pipefd;
}workerdata_t;


//小火车结构体
typedef struct train_s
{
    int length;
    char data[1000];
}train_t;
//函数体
int makeChild(workerdata_t*workerDataArr,int workerNum);
int tcpInit(const char *ip, const char *port, int *psockfd);
int sendfd(int Wpipefd,int fdtosend);
int recvfd(int Rpipefd,int *pfdtosend);
int epollCre();//return 一个监听集合epfd
int epollAdd(int epfd,int fd);//往epoll监听加入fd进行监听
int epollDel(int epfd,int fd);//从epoll监听删除fd解除监听

//小火车
int transFile_Small(int netfd);
int transFile_Big(int netfd);


//0拷贝技术 sendfile
int zeroCopySend(int netfd);
  1. Makefile文件

srcs:=server/worker.c server/main.c server/worker.c server/tcpInit.c server/sendfd.c \
server/recvfd.c server/epoll.c server/transFile.c #目前的服务器源码文件
objs:=$(srcs:%.c=%.o)
all:client/client server/server
client/client:client/client.c
    gcc $^ -o $@ -lpthread -g
server/server:$(objs) #先编译成.o文件 再链接成可执行程序
    gcc $^ -o $@ -lpthread 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值