maybe working
This commit is contained in:
parent
e1583f9a17
commit
060d1d8fef
@ -70,7 +70,7 @@ int run_observer(t_all *all)
|
||||
while(1)
|
||||
{
|
||||
i = 0;
|
||||
while(i <= all->number_of_philosophers)
|
||||
while(i < all->number_of_philosophers)
|
||||
{
|
||||
if (all->smert != 42)
|
||||
{
|
||||
|
||||
@ -5,7 +5,7 @@ int check_all_run(t_all *all)
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (i <= all->number_of_philosophers)
|
||||
while (i < all->number_of_philosophers)
|
||||
{
|
||||
if (all->data_philo->philors[i].worked)
|
||||
{
|
||||
@ -22,7 +22,7 @@ void run_simulation(t_all *all)
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (i <= all->number_of_philosophers)
|
||||
while (i < all->number_of_philosophers)
|
||||
{
|
||||
if (!all->data_philo->philors[i].can_run_simulation)
|
||||
{
|
||||
@ -38,17 +38,17 @@ void get_fork_for_philo(t_all *all)
|
||||
|
||||
i = 0;
|
||||
|
||||
while(i <= all->number_of_philosophers)
|
||||
while(i < all->number_of_philosophers)
|
||||
{
|
||||
if (i == 0)
|
||||
{
|
||||
all->data_philo->philors[i].more_fork = all->number_of_philosophers;
|
||||
all->data_philo->philors[i].less_fork = 0;
|
||||
all->data_philo->philors[i].more_fork = all->number_of_philosophers - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
all->data_philo->philors[i].more_fork = i + 1;
|
||||
all->data_philo->philors[i].less_fork = i;
|
||||
all->data_philo->philors[i].less_fork = i - 1;
|
||||
all->data_philo->philors[i].more_fork = i;
|
||||
}
|
||||
all->data_philo->philors[i].died = 0;
|
||||
all->data_philo->philors[i].nbr_philo = i;
|
||||
@ -67,7 +67,7 @@ int prepare_resources(t_all *all)
|
||||
i = 0;
|
||||
all->data_philo = ft_calloc(sizeof(t_philo_data), 1);
|
||||
all->data_philo->mutex = (pthread_mutex_t *)ft_calloc(all->number_of_philosophers + 1, sizeof(pthread_mutex_t));
|
||||
while (i <= all->number_of_philosophers)
|
||||
while (i < all->number_of_philosophers)
|
||||
{
|
||||
pthread_mutex_init(&all->data_philo->mutex[i], NULL);
|
||||
i++;
|
||||
@ -82,7 +82,7 @@ void run_all_phils(t_all *all)
|
||||
int i;
|
||||
i = 0;
|
||||
void *philo;
|
||||
while(i <= all->number_of_philosophers)
|
||||
while(i < all->number_of_philosophers)
|
||||
{
|
||||
philo = (void*)(&all->data_philo->philors[i]);
|
||||
if (pthread_create(&all->data_philo->philors[i].thread, NULL, (void*)run_trhead, philo) == -1)
|
||||
|
||||
@ -38,7 +38,7 @@ void ft_exit(t_all *all)
|
||||
i = 0;
|
||||
all->smert = 42;
|
||||
ft_msleep(200);
|
||||
while (i <= all->number_of_philosophers)
|
||||
while (i < all->number_of_philosophers)
|
||||
{
|
||||
pthread_mutex_destroy(&all->data_philo->philors[i].eat_mutex);
|
||||
pthread_mutex_destroy(&all->data_philo->mutex[i]);
|
||||
|
||||
@ -1,47 +0,0 @@
|
||||
.PHONY: all clean fclean re
|
||||
|
||||
SRCS = main.c utilc.c parser.c logic.c messages.c\
|
||||
prepare_simulation.c old_utilc.c time.c ft_itoa.c\
|
||||
ft_strjoin.c
|
||||
|
||||
|
||||
SRC_DIR = ./srcs/
|
||||
OBJ_DIR = ./obj/
|
||||
|
||||
OBJS = $(SRCS:%.c=%.o)
|
||||
|
||||
OBJS_FILES = $(addprefix $(OBJ_DIR), $(OBJS))
|
||||
|
||||
HEADER = philo_header.h
|
||||
|
||||
vpath %.h includes
|
||||
vpath %.o $(OBJ_DIR)
|
||||
vpath %.c $(SRC_DIR)
|
||||
|
||||
CC = gcc
|
||||
RM = rm -f
|
||||
CFLAGS = -g -Wall -Wextra -Werror -I ./includes/
|
||||
|
||||
NAME = philo_two
|
||||
|
||||
all: $(OBJ_DIR) $(NAME)
|
||||
|
||||
norme :
|
||||
norminette $(addprefix $(SRC_DIR), $(SRCS))
|
||||
|
||||
$(OBJ_DIR):
|
||||
mkdir -p obj
|
||||
|
||||
$(NAME): $(OBJS_FILES)
|
||||
$(CC) $(CFLAGS) -o $(NAME) $(OBJS_FILES) -lpthread
|
||||
|
||||
clean:
|
||||
$(RM) $(OBJS_FILES)
|
||||
|
||||
$(OBJ_DIR)%.o: %.c $(HEADER)
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
fclean: clean
|
||||
$(RM) $(NAME)
|
||||
|
||||
re: fclean $(NAME)
|
||||
@ -1,83 +0,0 @@
|
||||
#ifndef PHILO_HEADER_H
|
||||
# define PHILO_HEADER_H
|
||||
|
||||
# define _SLEEP_STEP 50
|
||||
# include <stdlib.h>
|
||||
# include <unistd.h>
|
||||
# include <pthread.h>
|
||||
# include <sys/time.h>
|
||||
# include <semaphore.h>
|
||||
# include <stdio.h>
|
||||
# include <string.h>
|
||||
|
||||
# define _SEM_NAME_FORKS "pSemForks"
|
||||
# define _SEM_WRITE_LOCK "write"
|
||||
|
||||
typedef struct s_philo_data t_philo_data;
|
||||
|
||||
typedef struct s_all
|
||||
{
|
||||
int number_of_philosophers;
|
||||
time_t time_to_die;
|
||||
time_t time_to_eat;
|
||||
time_t time_to_sleep;
|
||||
int number_of_times_each_philosopher_must_eat;
|
||||
time_t start_time;
|
||||
t_philo_data *data_philo;
|
||||
sem_t *write;
|
||||
int smert;
|
||||
int opt;
|
||||
} t_all;
|
||||
|
||||
|
||||
typedef struct s_philo
|
||||
{
|
||||
unsigned worked:1;
|
||||
unsigned can_run_simulation:1;
|
||||
pthread_t thread;
|
||||
int count_eat;
|
||||
time_t time_to_die;
|
||||
int died;
|
||||
int nbr_philo;
|
||||
time_t last_eat;
|
||||
time_t limit;
|
||||
t_all *all_struct;
|
||||
int is_eat;
|
||||
sem_t *eat_sem;
|
||||
char *name;
|
||||
} t_philo;
|
||||
|
||||
typedef struct s_philo_data
|
||||
{
|
||||
sem_t *sems;
|
||||
t_philo *philors;
|
||||
} t_philo_data;
|
||||
|
||||
void *ft_calloc(size_t num, size_t size);
|
||||
t_all *structalloc_and_bzero(void);
|
||||
int parse_and_check_values(char **argv, int quantity);
|
||||
int ft_atoi(const char *str);
|
||||
int check_f(char ch);
|
||||
int runner(t_all *all);
|
||||
int return_big(int a, int b);
|
||||
int return_less(int a, int b);
|
||||
time_t ft_get_time(void);
|
||||
void *run_trhead(t_philo *philo);
|
||||
int prepare_resources(t_all *all);
|
||||
int check_all_run(t_all *all);
|
||||
void run_simulation(t_all *all);
|
||||
void run_all_phils(t_all *all);
|
||||
void messages(t_all *all, t_philo *philo, char *str);
|
||||
void cycle(t_philo *philo);
|
||||
void ft_msleep(time_t interval_ms);
|
||||
void my_usleep(long time);
|
||||
void ft_exit(t_all *all);
|
||||
char *ft_itoa(int n);
|
||||
char *ft_strjoin(char const *s1, char const *s2);
|
||||
sem_t *reopen_sem(const char *name, int value);
|
||||
char *sem_set_name(char *str, int i);
|
||||
size_t ft_strlcpy(char *dst, const char *src, size_t size);
|
||||
size_t ft_strlcat(char *dst, const char *src, size_t size);
|
||||
int ft_strlen(char *str);
|
||||
void get_data_for_philo(t_all *all);
|
||||
#endif
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,43 +0,0 @@
|
||||
#include "../includes/philo_header.h"
|
||||
|
||||
static int nbleng(unsigned int n)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
i = 0;
|
||||
while (n >= 10)
|
||||
{
|
||||
n /= 10;
|
||||
i++;
|
||||
}
|
||||
return (i + 1);
|
||||
}
|
||||
|
||||
char *ft_itoa(int n)
|
||||
{
|
||||
char *dst;
|
||||
unsigned int leng;
|
||||
unsigned int nbr;
|
||||
unsigned int i;
|
||||
|
||||
nbr = (n < 0 ? -n : n);
|
||||
leng = nbleng(nbr);
|
||||
i = 0;
|
||||
if (!(dst = (char *)malloc(sizeof(char) * leng + 1 + (n < 0 ? 1 : 0))))
|
||||
return (NULL);
|
||||
if (n < 0)
|
||||
{
|
||||
dst[i] = '-';
|
||||
leng++;
|
||||
}
|
||||
i = leng - 1;
|
||||
while (nbr >= 10)
|
||||
{
|
||||
dst[i] = nbr % 10 + '0';
|
||||
nbr /= 10;
|
||||
i--;
|
||||
}
|
||||
dst[i] = nbr % 10 + '0';
|
||||
dst[leng] = '\0';
|
||||
return (dst);
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
#include "../includes/philo_header.h"
|
||||
|
||||
char *ft_strjoin(char const *s1, char const *s2)
|
||||
{
|
||||
int len1;
|
||||
int len2;
|
||||
char *new;
|
||||
|
||||
if (s1 && s2)
|
||||
{
|
||||
len1 = ft_strlen((char*)s1);
|
||||
len2 = ft_strlen((char*)s2);
|
||||
new = malloc(sizeof(char *) * len1 + len2 + 1);
|
||||
if (new)
|
||||
{
|
||||
ft_strlcpy(new, s1, len1 + 1);
|
||||
ft_strlcat(new, s2, len1 + len2 + 1);
|
||||
return (void *)(new);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
@ -1,114 +0,0 @@
|
||||
#include "../includes/philo_header.h"
|
||||
|
||||
void *run_trhead(t_philo *philo)
|
||||
{
|
||||
philo->worked = 1;
|
||||
while(1)
|
||||
{
|
||||
if (philo->can_run_simulation)
|
||||
break;
|
||||
}
|
||||
if (philo->can_run_simulation)
|
||||
{
|
||||
while( philo->all_struct->smert != 42)
|
||||
{
|
||||
if (philo->all_struct->opt)
|
||||
{
|
||||
if (philo->count_eat == philo->all_struct->number_of_times_each_philosopher_must_eat)
|
||||
philo->all_struct->smert = 42;
|
||||
}
|
||||
cycle(philo);
|
||||
}
|
||||
}
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
void take_forks(t_philo *philo)
|
||||
{
|
||||
t_all *all;
|
||||
all = philo->all_struct;
|
||||
|
||||
|
||||
|
||||
messages(philo->all_struct, philo, "thinking");
|
||||
sem_wait(all->data_philo->sems);
|
||||
messages(philo->all_struct, philo, "has taken a fork");
|
||||
sem_wait(all->data_philo->sems);
|
||||
messages(philo->all_struct, philo, "has taken a fork");
|
||||
}
|
||||
void eating(t_philo *philo)
|
||||
{
|
||||
t_all *all;
|
||||
all = philo->all_struct;
|
||||
|
||||
|
||||
|
||||
sem_wait(philo->eat_sem);
|
||||
messages(philo->all_struct, philo, "eating");
|
||||
philo->last_eat = ft_get_time() - philo->all_struct->start_time;
|
||||
ft_msleep(philo->all_struct->time_to_eat);
|
||||
philo->count_eat++;
|
||||
sem_post(philo->eat_sem);
|
||||
}
|
||||
void sleeping(t_philo *philo)
|
||||
{
|
||||
t_all *all;
|
||||
all = philo->all_struct;
|
||||
|
||||
|
||||
|
||||
messages(philo->all_struct, philo, "sleeping");
|
||||
sem_post(all->data_philo->sems);
|
||||
sem_post(all->data_philo->sems);
|
||||
ft_msleep(philo->all_struct->time_to_sleep);
|
||||
}
|
||||
|
||||
void cycle(t_philo *philo)
|
||||
{
|
||||
take_forks(philo);
|
||||
eating(philo);
|
||||
sleeping(philo);
|
||||
}
|
||||
|
||||
int run_observer(t_all *all)
|
||||
{
|
||||
int i;
|
||||
i = 0;
|
||||
time_t time_eat;
|
||||
while(1)
|
||||
{
|
||||
i = 0;
|
||||
while(i <= all->number_of_philosophers)
|
||||
{
|
||||
sem_wait(all->data_philo->philors[i].eat_sem);
|
||||
if (all->smert != 42)
|
||||
{
|
||||
time_eat = (ft_get_time() - all->start_time) - all->data_philo->philors[i].last_eat;
|
||||
if (time_eat > all->time_to_die)
|
||||
{
|
||||
printf("%ld %d died\n", ft_get_time() - all->start_time, i + 1);
|
||||
return(2);
|
||||
}
|
||||
}
|
||||
else
|
||||
return(2);
|
||||
sem_post(all->data_philo->philors[i].eat_sem);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int runner(t_all *all)
|
||||
{
|
||||
prepare_resources(all);
|
||||
run_all_phils(all);
|
||||
if (check_all_run(all))
|
||||
{
|
||||
all->start_time = ft_get_time();
|
||||
run_simulation(all);
|
||||
}
|
||||
if (!run_observer(all))
|
||||
return(0);
|
||||
return(1);
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
#include "../includes/philo_header.h"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (parse_and_check_values(argv, argc) == 2)
|
||||
return(0);
|
||||
else
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
#include "../includes/philo_header.h"
|
||||
|
||||
void messages(t_all *all, t_philo *philo, char *str)
|
||||
{
|
||||
time_t timestemp = ft_get_time() - all->start_time;
|
||||
if (philo->all_struct->smert != 42)
|
||||
{
|
||||
sem_wait(all->write);
|
||||
printf("%ld %*s%d %s\n", timestemp, philo->nbr_philo * 30, "", philo->nbr_philo, str);
|
||||
sem_post(all->write);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,57 +0,0 @@
|
||||
#include "../includes/philo_header.h"
|
||||
|
||||
int check_f(char ch)
|
||||
{
|
||||
if (ch == '\t' || ch == '\n' || ch == ' ' || \
|
||||
ch == '\v' || ch == '\f' || ch == '\r')
|
||||
return (1);
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
|
||||
int ft_atoi(const char *str)
|
||||
{
|
||||
int i;
|
||||
unsigned long int result;
|
||||
int operator;
|
||||
|
||||
i = 0;
|
||||
operator = 1;
|
||||
result = 0;
|
||||
while (check_f(str[i]))
|
||||
i++;
|
||||
if (str[i] == '-' || str[i] == '+')
|
||||
{
|
||||
if (str[i] == '-')
|
||||
operator *= -1;
|
||||
i++;
|
||||
}
|
||||
while (str[i] >= '0' && str[i] <= '9')
|
||||
{
|
||||
if (result > 922337203685477580 && operator == -1)
|
||||
return (0);
|
||||
else if (result > 922337203685477580 && operator == 1)
|
||||
return (-1);
|
||||
result = result * 10 + str[i] - '0';
|
||||
i++;
|
||||
}
|
||||
return (result * operator);
|
||||
}
|
||||
|
||||
void *ft_calloc(size_t num, size_t size)
|
||||
{
|
||||
void *addr;
|
||||
unsigned int nbytes;
|
||||
|
||||
nbytes = num * size;
|
||||
addr = malloc(nbytes);
|
||||
if (!size || !num || (size == 0 && num == 0))
|
||||
return ((void *)addr);
|
||||
if (!addr)
|
||||
return (NULL);
|
||||
else
|
||||
{
|
||||
memset(addr, '\0', nbytes);
|
||||
}
|
||||
return ((void *)addr);
|
||||
}
|
||||
@ -1,87 +0,0 @@
|
||||
#include "../includes/philo_header.h"
|
||||
|
||||
int check_param(t_all *all, int optional)
|
||||
{
|
||||
if (optional)
|
||||
{
|
||||
if (all->number_of_philosophers <= 0)
|
||||
return(1);
|
||||
if (all->time_to_die <= 0)
|
||||
return(1);
|
||||
if (all->time_to_eat <= 0)
|
||||
return(1);
|
||||
if (all->time_to_sleep <= 0)
|
||||
return(1);
|
||||
if (all->number_of_times_each_philosopher_must_eat <= 0)
|
||||
return(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (all->number_of_philosophers <= 0)
|
||||
return(1);
|
||||
if (all->time_to_die <= 0)
|
||||
return(1);
|
||||
if (all->time_to_eat <= 0)
|
||||
return(1);
|
||||
if (all->time_to_sleep <= 0)
|
||||
return(1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int parse_param(t_all *all, int optional, char **argv)
|
||||
{
|
||||
all->smert = 0;
|
||||
if (optional)
|
||||
{
|
||||
all->number_of_philosophers = ft_atoi(argv[1]);
|
||||
all->time_to_die = ft_atoi(argv[2]);
|
||||
all->time_to_eat = ft_atoi(argv[3]);
|
||||
all->time_to_sleep = ft_atoi(argv[4]);
|
||||
all->number_of_times_each_philosopher_must_eat = ft_atoi(argv[5]);
|
||||
all->opt = 1;
|
||||
return (check_param(all, 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
all->number_of_philosophers = ft_atoi(argv[1]);
|
||||
all->time_to_die = ft_atoi(argv[2]);
|
||||
all->time_to_eat = ft_atoi(argv[3]);
|
||||
all->time_to_sleep = ft_atoi(argv[4]);
|
||||
all->number_of_times_each_philosopher_must_eat = 0;
|
||||
all->opt = 0;
|
||||
return (check_param(all, 0));
|
||||
}
|
||||
}
|
||||
|
||||
int parse_and_check_values(char **argv, int quantity)
|
||||
{
|
||||
t_all *all;
|
||||
int bool;
|
||||
|
||||
if (quantity == 5)
|
||||
bool = 0;
|
||||
if (quantity == 6)
|
||||
bool = 1;
|
||||
all = structalloc_and_bzero();
|
||||
if (quantity == 5 || quantity == 6)
|
||||
{
|
||||
if (!parse_param(all, bool, argv))
|
||||
{
|
||||
if (runner(all) == 2)
|
||||
return (2);
|
||||
return(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("bad arg\n");
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("error please use argument 5 (optional) or 4 (standart)\n");
|
||||
free(all);
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
@ -5,14 +5,14 @@ int check_all_run(t_all *all)
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (i <= all->number_of_philosophers)
|
||||
while (i < all->number_of_philosophers)
|
||||
{
|
||||
if (all->data_philo->philors[i].worked)
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
printf("все запустились !\n");
|
||||
// printf("все запустились !\n");
|
||||
return (1);
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@ void run_simulation(t_all *all)
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (i <= all->number_of_philosophers)
|
||||
while (i < all->number_of_philosophers)
|
||||
{
|
||||
if (!all->data_philo->philors[i].can_run_simulation)
|
||||
{
|
||||
@ -38,7 +38,7 @@ void get_data_for_philo(t_all *all)
|
||||
|
||||
i = 0;
|
||||
|
||||
while(i <= all->number_of_philosophers)
|
||||
while(i < all->number_of_philosophers)
|
||||
{
|
||||
all->data_philo->philors[i].name = sem_set_name("philo", i);
|
||||
all->data_philo->philors[i].eat_sem = reopen_sem(all->data_philo->philors[i].name, 1);
|
||||
@ -74,7 +74,7 @@ void run_all_phils(t_all *all)
|
||||
int i;
|
||||
i = 0;
|
||||
void *philo;
|
||||
while(i <= all->number_of_philosophers)
|
||||
while(i < all->number_of_philosophers)
|
||||
{
|
||||
philo = (void*)(&all->data_philo->philors[i]);
|
||||
if (pthread_create(&all->data_philo->philors[i].thread, NULL, (void*)run_trhead, philo) == -1)
|
||||
|
||||
@ -1,37 +0,0 @@
|
||||
#include "../includes/philo_header.h"
|
||||
|
||||
time_t ft_get_time(void)
|
||||
{
|
||||
time_t return_value;
|
||||
struct timeval current_time;
|
||||
gettimeofday(¤t_time, NULL);
|
||||
return_value = (current_time.tv_sec * 1000) + (current_time.tv_usec / 1000);
|
||||
return (return_value);
|
||||
}
|
||||
|
||||
void ft_msleep(time_t interval_ms)
|
||||
{
|
||||
time_t end_ms = ft_get_time() + interval_ms;
|
||||
time_t now_ms = ft_get_time();
|
||||
|
||||
while (now_ms < end_ms)
|
||||
{
|
||||
usleep(_SLEEP_STEP);
|
||||
now_ms = ft_get_time();
|
||||
}
|
||||
}
|
||||
|
||||
long get_time(void)
|
||||
{
|
||||
struct timeval time;
|
||||
gettimeofday(&time, NULL);
|
||||
return ((long)(time.tv_sec * 1000 + time.tv_usec / 1000));
|
||||
}
|
||||
|
||||
void my_usleep(long time)
|
||||
{
|
||||
long t;
|
||||
t = get_time();
|
||||
while (get_time() - t < time)
|
||||
usleep(1);
|
||||
}
|
||||
@ -1,132 +0,0 @@
|
||||
#include "../includes/philo_header.h"
|
||||
|
||||
t_all *structalloc_and_bzero(void)
|
||||
{
|
||||
t_all *all;
|
||||
|
||||
all = ft_calloc(sizeof(t_all), 1);
|
||||
all->number_of_philosophers = -1;
|
||||
all->time_to_die = -1;
|
||||
all->time_to_eat = -1;
|
||||
all->time_to_sleep = -1;
|
||||
all->number_of_times_each_philosopher_must_eat = -1;
|
||||
return(all);
|
||||
}
|
||||
|
||||
size_t ft_strlcpy(char *dst, const char *src, size_t size)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int count;
|
||||
|
||||
count = 0;
|
||||
if (!dst && !src)
|
||||
return (0);
|
||||
while (src[count] != '\0')
|
||||
{
|
||||
++count;
|
||||
}
|
||||
i = 0;
|
||||
if (size > 0)
|
||||
{
|
||||
while (src[i] != '\0' && i < (size - 1) && src[i])
|
||||
{
|
||||
dst[i] = src[i];
|
||||
++i;
|
||||
}
|
||||
dst[i] = '\0';
|
||||
}
|
||||
return (count);
|
||||
}
|
||||
|
||||
size_t ft_strlcat(char *dst, const char *src, size_t size)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int len;
|
||||
|
||||
len = 0;
|
||||
if (!dst && !src)
|
||||
return (0);
|
||||
len = ft_strlen(dst);
|
||||
i = 0;
|
||||
if (size < len)
|
||||
return (ft_strlen((char *)src) + size);
|
||||
if (size)
|
||||
{
|
||||
while (src[i] && len + 1 < size)
|
||||
dst[len++] = src[i++];
|
||||
dst[len] = '\0';
|
||||
}
|
||||
while (src[i])
|
||||
{
|
||||
i++;
|
||||
len++;
|
||||
}
|
||||
return (len);
|
||||
}
|
||||
|
||||
|
||||
int ft_strlen(char *str)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (str[i])
|
||||
i++;
|
||||
return(i);
|
||||
}
|
||||
|
||||
int return_big(int a, int b)
|
||||
{
|
||||
if (a > b)
|
||||
{
|
||||
return (a);
|
||||
}
|
||||
return (b);
|
||||
}
|
||||
|
||||
int return_less(int a, int b)
|
||||
{
|
||||
if (a < b)
|
||||
{
|
||||
return (a);
|
||||
}
|
||||
return (b);
|
||||
}
|
||||
|
||||
void ft_exit(t_all *all)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
all->smert = 42;
|
||||
ft_msleep(200);
|
||||
while (i <= all->number_of_philosophers)
|
||||
{
|
||||
// pthread_mutex_destroy(&all->data_philo->philors[i].eat_mutex);
|
||||
//pthread_mutex_destroy(&all->data_philo->mutex[i]); // TODO fix this
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while (i < all->number_of_philosophers)
|
||||
{
|
||||
free(&all->data_philo->philors[i]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
char *sem_set_name(char *str, int i)
|
||||
{
|
||||
char *temp_nbr;
|
||||
char *returnstr;
|
||||
|
||||
temp_nbr = ft_itoa(i);
|
||||
returnstr = ft_strjoin(str, temp_nbr);
|
||||
free(temp_nbr);
|
||||
return(returnstr);
|
||||
}
|
||||
|
||||
sem_t *reopen_sem(const char *name, int value)
|
||||
{
|
||||
sem_unlink(name);
|
||||
return (sem_open(name, O_RDWR | O_CREAT, S_IRWXU, value));
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user