diff --git a/philo_one/Makefile b/philo_one/Makefile index 942b953..899f5ee 100644 --- a/philo_one/Makefile +++ b/philo_one/Makefile @@ -1,6 +1,6 @@ .PHONY: all clean fclean re -SRCS = main.c utilc.c parser.c +SRCS = main.c utilc.c parser.c logic.c SRC_DIR = ./srcs/ @@ -18,7 +18,7 @@ vpath %.c $(SRC_DIR) CC = gcc RM = rm -f -CFLAGS = -Wall -Wextra -Werror -I ./includes/ +CFLAGS = -Wall -Wextra -Werror -I ./includes/ NAME = philo_one @@ -31,13 +31,13 @@ $(OBJ_DIR): mkdir -p obj $(NAME): $(OBJS_FILES) - $(CC) $(CFLAGS) -o $(NAME) $(OBJS_FILES) + $(CC) $(CFLAGS) -o $(NAME) $(OBJS_FILES) -lpthread clean: $(RM) $(OBJS_FILES) $(OBJ_DIR)%.o: %.c $(HEADER) - $(CC) $(CFLAGS) -c $< -o $@ + $(CC) $(CFLAGS) -c $< -o $@ fclean: clean $(RM) $(NAME) diff --git a/philo_one/includes/philo_header.h b/philo_one/includes/philo_header.h index 90b7684..cf4aa2a 100644 --- a/philo_one/includes/philo_header.h +++ b/philo_one/includes/philo_header.h @@ -23,5 +23,6 @@ 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 optional); #endif diff --git a/philo_one/obj/logic.o b/philo_one/obj/logic.o new file mode 100644 index 0000000..22eaa60 Binary files /dev/null and b/philo_one/obj/logic.o differ diff --git a/philo_one/obj/parser.o b/philo_one/obj/parser.o index 01a56e7..368455b 100644 Binary files a/philo_one/obj/parser.o and b/philo_one/obj/parser.o differ diff --git a/philo_one/philo_one b/philo_one/philo_one index d5a26e7..bf58e53 100755 Binary files a/philo_one/philo_one and b/philo_one/philo_one differ diff --git a/philo_one/srcs/logic.c b/philo_one/srcs/logic.c new file mode 100644 index 0000000..0991a91 --- /dev/null +++ b/philo_one/srcs/logic.c @@ -0,0 +1,47 @@ +#include "../includes/philo_header.h" + +void *test(char *str) +{ + printf("поток %s отработал\n", str); + return(NULL); +} + +int func_test(t_all *all) +{ + pthread_t t0; + pthread_t t1; + void *result; + (void)all; + + if (pthread_create(&t0, NULL, (void*)test, "t0") == -1) // предпоследнее это функция и аргумент + { + printf("не могу создать поток t0\n"); + } + if (pthread_create(&t1, NULL, (void*)test, "t1") == -1) // предпоследнее это функция и аргумент + { + printf("не могу создать поток t1\n"); + } + + if (pthread_join(t0, &result) == -1) + { + printf("не могу присоединиться к потоку t0\n"); + } + if (pthread_join(t1, &result) == -1) + { + printf("не могу присоединиться к потоку t1\n"); + } + return (0); +} + +int runner(t_all *all, int optional) +{ + if (optional) + { + func_test(all); + return(0); + } + else + { + return(1); + } +} diff --git a/philo_one/srcs/main.c b/philo_one/srcs/main.c index 3a36598..4a25c98 100644 --- a/philo_one/srcs/main.c +++ b/philo_one/srcs/main.c @@ -9,6 +9,5 @@ int main(int argc, char **argv) printf("exit because error\n"); return (1); } - return(0); } diff --git a/philo_one/srcs/parser.c b/philo_one/srcs/parser.c index 2c9ddc9..3169ef7 100644 --- a/philo_one/srcs/parser.c +++ b/philo_one/srcs/parser.c @@ -60,6 +60,7 @@ int parse_and_check_values(char **argv, int quantity) if (!parse_param(all, 0, argv)) { printf("ok standart run\n"); + runner(all, 0); return(1); } else @@ -73,6 +74,7 @@ int parse_and_check_values(char **argv, int quantity) if (!parse_param(all, 1, argv)) { printf("ok run with optional\n"); + runner(all, 1); return(1); } else