[✨] feat: started exec
This commit is contained in:
Binary file not shown.
Binary file not shown.
BIN
.cache/clangd/index/pipex.h.D099372D6E124AAF.idx
Normal file
BIN
.cache/clangd/index/pipex.h.D099372D6E124AAF.idx
Normal file
Binary file not shown.
@ -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;
|
||||
|
@ -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
BIN
obj/src/main.o
Normal file
Binary file not shown.
BIN
obj/src/parsing/parsing.o
Normal file
BIN
obj/src/parsing/parsing.o
Normal file
Binary file not shown.
BIN
obj/src/test.o
Normal file
BIN
obj/src/test.o
Normal file
Binary file not shown.
BIN
obj/src/utils/ft_freetab.o
Normal file
BIN
obj/src/utils/ft_freetab.o
Normal file
Binary file not shown.
83
src/main.c
83
src/main.c
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
46
test.c
Normal 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);
|
||||
}
|
Reference in New Issue
Block a user