Archived
1
0

[] feat: started exec

This commit is contained in:
2024-04-03 16:41:58 +02:00
parent 7d09b4cb31
commit 4e0a049e1d
13 changed files with 134 additions and 30 deletions

Binary file not shown.

View File

@ -6,13 +6,15 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/28 16:54:40 by adjoly #+# #+# */
/* Updated: 2024/03/29 10:41:40 by adjoly ### ########.fr */
/* Updated: 2024/04/03 13:56:08 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef PARSING_H
# define PARSING_H
# include "libft.h"
typedef struct s_pcmd
{
char *cmd;

View File

@ -6,16 +6,27 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/22 21:14:06 by adjoly #+# #+# */
/* Updated: 2024/03/22 21:16:23 by adjoly ### ########.fr */
/* Updated: 2024/04/03 14:24:09 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef PIPEX_H
# define PIPEX_H
typedef struct t_pipex
{
# include "parsing.h"
# include "libft.h"
} s_pipex;
# include <stdlib.h>
# include <unistd.h>
# include <fcntl.h>
typedef struct s_pipex
{
t_pcmd *cmd;
int infile;
int outfile;
} t_pipex;
void ft_senderror(t_pipex *pipex, char *msg);
#endif

BIN
obj/src/main.o Normal file

Binary file not shown.

BIN
obj/src/parsing/parsing.o Normal file

Binary file not shown.

BIN
obj/src/test.o Normal file

Binary file not shown.

BIN
obj/src/utils/ft_freetab.o Normal file

Binary file not shown.

BIN
pipex Executable file

Binary file not shown.

View File

@ -6,40 +6,83 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/21 10:03:04 by adjoly #+# #+# */
/* Updated: 2024/04/02 11:08:15 by adjoly ### ########.fr */
/* Updated: 2024/04/03 16:30:07 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
//#include "libft.h"
#include "libft.h"
#include "parsing.h"
#include "pipex.h"
#include <stdlib.h>
#include <unistd.h>
int main(int ac, char **av)
void free_pcmd(t_pcmd *cmd)
{
t_pcmd *cmd;
t_pcmd *tmp;
char **option_tmp;
cmd = parse_cmd(ac, av + 2);
tmp = cmd;
while (tmp && (*tmp).cmd)
while (tmp && tmp->cmd)
{
ft_printf("cmd : %s\n", (*tmp).cmd);
option_tmp = (*tmp).option;
while (*option_tmp)
{
ft_printf("%s\n", *option_tmp);
option_tmp++;
}
tmp++;
}
tmp = cmd;
while (tmp && (*tmp).cmd)
{
if (tmp->option)
ft_freearr(tmp->option);
free(tmp->cmd);
ft_freearr(tmp->option);
tmp++;
}
free(cmd);
}
void check_empty_args(char **av)
{
char **tmp;
char *tmp_av;
tmp = av;
tmp++;
while (*tmp)
{
tmp_av = *tmp;
if (!*tmp_av)
ft_senderror(NULL, "You have empty argument");
while (*tmp_av)
{
if (*tmp_av != 32)
break ;
tmp_av++;
}
if (!*tmp_av)
ft_senderror(NULL, "You have empty argument");
tmp++;
}
}
void ft_senderror(t_pipex *pipex, char *msg)
{
(void)pipex;
ft_putendl_fd(msg, STDERR_FILENO);
if (!pipex)
exit(EXIT_FAILURE);
if (pipex->cmd)
free_pcmd(pipex->cmd);
free(pipex);
exit(EXIT_FAILURE);
}
int main(int ac, char **av, char **env)
{
t_pipex *pipex;
check_empty_args(av);
pipex = malloc(sizeof(t_pipex));
pipex->infile = open(av[1], O_RDONLY);
pipex->outfile = open(av[ac - 1], O_RDONLY);
pipex->cmd = parse_cmd(ac - 3, av);
while (*env)
{
ft_putstr_fd(*env, STDOUT_FILENO);
env++;
}
free_pcmd(pipex->cmd);
free(pipex);
return (EXIT_SUCCESS);
}

View File

@ -6,7 +6,7 @@
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/22 21:13:26 by adjoly #+# #+# */
/* Updated: 2024/04/02 11:08:57 by adjoly ### ########.fr */
/* Updated: 2024/04/03 14:20:56 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
@ -44,18 +44,20 @@ t_pcmd split_cmd(char *cmd_av)
t_pcmd *parse_cmd(int ac, char **av)
{
char **tmp;
int i;
t_pcmd *cmd_arr;
t_pcmd *cmd_tmp;
(void)ac;
cmd_arr = ft_calloc(ac, sizeof(t_pcmd) + 1);
i = 0;
cmd_arr = ft_calloc(ac + 1, sizeof(t_pcmd));
cmd_tmp = cmd_arr;
tmp = av;
while (*tmp)
tmp = av + 2;
while (i < ac)
{
*cmd_tmp = split_cmd(*tmp);
cmd_tmp++;
tmp++;
i++;
}
return (cmd_arr);
}

46
test.c Normal file
View File

@ -0,0 +1,46 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* test.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/03 15:36:42 by adjoly #+# #+# */
/* Updated: 2024/04/03 16:27:03 by adjoly ### ########.fr */
/* */
/* ************************************************************************** */
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
char *cmd[] = {"sleep", "5", 0};
char *path = "/bin/sleep";
char *cmd2[] = {"sleep", "5", 0};
char *path2 = "/bin/sleep";
int fd[2];
if (pipe(fd) == -1)
return(1);
int pid = fork();
if (!pid)
{
dup2(fd[1], STDOUT_FILENO);
close(fd[0]);
close(fd[1]);
execve(path, cmd, NULL);
}
close(fd[1]);
int pid2 = fork();
if (!pid2)
{
dup2(fd[0], STDIN_FILENO);
close(fd[0]);
execve(path2, cmd2, NULL);
}
close(fd[1]);
waitpid(pid, NULL, 0);
waitpid(pid2, NULL, 0);
}