如题
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <stdbool.h>
#include<unistd.h>
#include<string.h>
#include<strings.h>
#include<errno.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<dirent.h>
#include<time.h>
#define PTHREAD_MAX 20 //最多有20个线程
#define TASK_FULL_NUM 100 //最多等待100个任务
//任务链表结构体
struct task{
void *(*task_func)(char* from_adr,char* to_adr);//任务函数
// int task_arg;//任务函数的参数
char src[300];
char dst[300];
struct task *next;
};
//线程池
struct pthread_pool{
pthread_t tid[PTHREAD_MAX];//线程号数组
struct task *head;//任务链表的头节点
unsigned int active_pthread_num;//正在运行的线程个数
unsigned int wait_task_num;//正在等待的任务个数
pthread_mutex_t m;//线程池互斥锁
pthread_cond_t v;//线程池条件变量
bool shutdown;//线程销毁标志位 flase:不销毁 true:销毁
};
int is_dir( char* file_name);
int endwith(char* s,char c);
//void cp_file( char *source_path , char *destination_path);
void copy_folder(char* source_path,char *destination_path,struct pthread_pool *pool);
int is_dir( char* file_name);
void *f(char* from_adr , char* to_adr);
void cleanup(void *arg);
void *func(void *arg);
struct pthread_pool* pthread_pool_init();
int pthread_pool_add(struct pthread_pool *pool,int addnum);
int pool_add_task(struct pthread_pool *pool,void *(*f)(char* src ,char* dst),char* src,char* dst );
int pool_delete(struct pthread_pool *pool);
// void cp_file( char *source_path , char *destination_path)
// {
// }
int endwith(char* s,char c){//用于判断字符串结尾是否为“.”
printf("end : %c\n",s[strlen(s)-1]);
if(s[strlen(s)-1]==c){
return 1;
}
else{
return 0;
}
}
void copy_folder(char* source_path,char *destination_path,struct pthread_pool *pool)
{
//printf(" your dir is correct !\n");// remind user input dir is correct
DIR *dst_dp = opendir(destination_path);
if(dst_dp == NULL )
{
printf(" your dest dir is not existed \n");
printf(" system will mkdir for U \n");
if(mkdir(destination_path,0777) == -1)
{
printf(" error occur during mkdir");
exit(-1);
}
}
DIR *src_dp = opendir(source_path);
struct dirent *ep_src