fixing pipes
This commit is contained in:
parent
d051ccc127
commit
beab4ff174
16 changed files with 44 additions and 28 deletions
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/10 16:55:09 by jhalford #+# #+# */
|
/* Created: 2016/12/10 16:55:09 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/08 20:06:47 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:38:44 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
# define JOB_NOTIFIED (1 << 0)
|
# define JOB_NOTIFIED (1 << 0)
|
||||||
# define JOB_BG (1 << 1)
|
# define JOB_BG (1 << 1)
|
||||||
|
|
||||||
# define JOB_IS_BG(j) (j & JOB_BG)
|
# define JOB_IS_BG(j) (j & JOB_BG)
|
||||||
# define JOB_IS_FG(j) (!JOB_IS_BG(j))
|
# define JOB_IS_FG(j) (!JOB_IS_BG(j))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/10 16:01:30 by jhalford #+# #+# */
|
/* Created: 2016/12/10 16:01:30 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/08 16:46:12 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:36:48 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -20,6 +20,7 @@ int exec_ampersand(t_btree **ast)
|
||||||
return (exec_semi(ast));
|
return (exec_semi(ast));
|
||||||
exec = &data_singleton()->exec;
|
exec = &data_singleton()->exec;
|
||||||
push(&exec->op_stack, TK_AMP);
|
push(&exec->op_stack, TK_AMP);
|
||||||
|
exec->job.attrs |= JOB_BG;
|
||||||
ft_exec(&(*ast)->left);
|
ft_exec(&(*ast)->left);
|
||||||
exec->attrs &= ~EXEC_AOL_MASK;
|
exec->attrs &= ~EXEC_AOL_MASK;
|
||||||
exec->job.attrs &= ~JOB_BG;
|
exec->job.attrs &= ~JOB_BG;
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/07 15:47:30 by wescande #+# #+# */
|
/* Created: 2017/03/07 15:47:30 by wescande #+# #+# */
|
||||||
/* Updated: 2017/03/10 11:58:54 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:36:02 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -24,16 +24,15 @@ int exec_leaf(t_btree **ast)
|
||||||
{
|
{
|
||||||
DG("forked pid=[%i], name=[%s]", p.pid, p.data.cmd.av[0]);
|
DG("forked pid=[%i], name=[%s]", p.pid, p.data.cmd.av[0]);
|
||||||
job_addprocess(&p);
|
job_addprocess(&p);
|
||||||
|
DG("[BG:%i]", JOB_IS_BG(job->attrs));
|
||||||
if (IS_PIPEEND(p))
|
if (IS_PIPEEND(p))
|
||||||
{
|
{
|
||||||
if (JOB_IS_FG(job->attrs))
|
if (JOB_IS_FG(job->attrs))
|
||||||
put_job_in_foreground(job, 0);
|
put_job_in_foreground(job, 0);
|
||||||
else
|
/* else */
|
||||||
put_job_in_background(job, 0);
|
/* put_job_in_background(job, 0); */
|
||||||
job->pgid = 0;
|
job->pgid = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (p.fdout != STDOUT)
|
|
||||||
close(p.fdout);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/13 14:20:45 by jhalford #+# #+# */
|
/* Created: 2016/12/13 14:20:45 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/10 11:58:53 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:21:02 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -40,9 +40,12 @@ int launch_process(t_process *p)
|
||||||
{
|
{
|
||||||
DG("gonna reset fds");
|
DG("gonna reset fds");
|
||||||
process_resetfds(p);
|
process_resetfds(p);
|
||||||
return (-1);
|
return (1);
|
||||||
}
|
}
|
||||||
p->pid = pid;
|
p->pid = pid;
|
||||||
process_setgroup(p, pid);
|
process_setgroup(p, pid);
|
||||||
|
/* process_resetfds(p); */
|
||||||
|
if (p->fdout != STDOUT)
|
||||||
|
close(p->fdout);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/29 16:04:18 by jhalford #+# #+# */
|
/* Created: 2016/11/29 16:04:18 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/09 15:14:43 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:31:30 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -51,6 +51,7 @@ int process_redirect(t_process *p)
|
||||||
}
|
}
|
||||||
redirs = redirs->next;
|
redirs = redirs->next;
|
||||||
}
|
}
|
||||||
|
DG("redirecting [%i:%i] [%i]", p->fdin, p->fdout, p->to_close);
|
||||||
if (p->to_close != STDIN)
|
if (p->to_close != STDIN)
|
||||||
close(p->to_close);
|
close(p->to_close);
|
||||||
if (p->fdin != STDIN)
|
if (p->fdin != STDIN)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/09 14:51:23 by jhalford #+# #+# */
|
/* Created: 2017/03/09 14:51:23 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/10 13:09:25 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 14:35:00 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/06 22:12:31 by jhalford #+# #+# */
|
/* Created: 2017/02/06 22:12:31 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/10 14:01:06 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 14:31:24 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/05 14:54:45 by jhalford #+# #+# */
|
/* Created: 2017/03/05 14:54:45 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/08 16:46:51 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:37:47 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -28,10 +28,11 @@ int set_process(t_process *p, t_btree *ast)
|
||||||
return (1);
|
return (1);
|
||||||
fds[PIPE_WRITE] = STDOUT;
|
fds[PIPE_WRITE] = STDOUT;
|
||||||
fds[PIPE_READ] = STDIN;
|
fds[PIPE_READ] = STDIN;
|
||||||
if (op == TK_AMP)
|
if (op == TK_PIPE)
|
||||||
exec->job.attrs |= JOB_BG;
|
{
|
||||||
else if (op == TK_PIPE)
|
|
||||||
pipe(fds);
|
pipe(fds);
|
||||||
|
DG("[%i] -> PIPE -> [%i]", fds[PIPE_WRITE], fds[PIPE_READ]);
|
||||||
|
}
|
||||||
p->fdin = exec->fdin;
|
p->fdin = exec->fdin;
|
||||||
p->to_close = fds[PIPE_READ];
|
p->to_close = fds[PIPE_READ];
|
||||||
p->fdout = fds[PIPE_WRITE];
|
p->fdout = fds[PIPE_WRITE];
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/13 13:54:51 by jhalford #+# #+# */
|
/* Created: 2016/12/13 13:54:51 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/08 20:16:09 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:36:33 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -27,9 +27,15 @@ int job_addprocess(t_process *p)
|
||||||
job->pgid = p->pid;
|
job->pgid = p->pid;
|
||||||
ft_lstadd(&jobc->first_job, ft_lstnew(job, sizeof(*job)));
|
ft_lstadd(&jobc->first_job, ft_lstnew(job, sizeof(*job)));
|
||||||
}
|
}
|
||||||
|
DG("check 0");
|
||||||
job = jobc->first_job->content;
|
job = jobc->first_job->content;
|
||||||
ft_lsteadd(&job->first_process, ft_lstnew(p, sizeof(*p)));
|
ft_lsteadd(&job->first_process, ft_lstnew(p, sizeof(*p)));
|
||||||
|
DG("[BG:%i]", JOB_IS_BG(job->attrs));
|
||||||
if (JOB_IS_BG(job->attrs) && IS_PIPEEND(*p))
|
if (JOB_IS_BG(job->attrs) && IS_PIPEEND(*p))
|
||||||
|
{
|
||||||
|
DG("check 2");
|
||||||
job_notify_new(job);
|
job_notify_new(job);
|
||||||
|
}
|
||||||
|
DG("check 3");
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/13 14:27:01 by jhalford #+# #+# */
|
/* Created: 2016/12/13 14:27:01 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/08 18:28:01 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:36:10 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/15 12:51:08 by jhalford #+# #+# */
|
/* Created: 2016/12/15 12:51:08 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/08 18:18:34 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 14:40:16 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/15 12:56:11 by jhalford #+# #+# */
|
/* Created: 2016/12/15 12:56:11 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/10 12:41:11 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:38:56 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/15 11:49:05 by jhalford #+# #+# */
|
/* Created: 2016/12/15 11:49:05 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/08 20:46:24 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:40:32 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -24,7 +24,7 @@ int job_wait(int id)
|
||||||
j = ft_lst_find(jobc->first_job, &id, job_cmp_id)->content;
|
j = ft_lst_find(jobc->first_job, &id, job_cmp_id)->content;
|
||||||
do
|
do
|
||||||
pid = waitpid(-j->pgid, &status, WUNTRACED);
|
pid = waitpid(-j->pgid, &status, WUNTRACED);
|
||||||
while (!mark_process_status(pid, status)
|
while (pid > 1 && !mark_process_status(pid, status)
|
||||||
&& !job_is_stopped(id)
|
&& !job_is_stopped(id)
|
||||||
&& !job_is_completed(id));
|
&& !job_is_completed(id));
|
||||||
return (0);
|
return (0);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/13 15:03:29 by jhalford #+# #+# */
|
/* Created: 2016/12/13 15:03:29 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/08 20:33:24 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:08:14 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/13 14:58:36 by jhalford #+# #+# */
|
/* Created: 2016/12/13 14:58:36 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/08 20:33:21 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:16:49 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -17,7 +17,10 @@ int put_job_in_foreground(t_job *j, int cont)
|
||||||
t_jobc *jobc;
|
t_jobc *jobc;
|
||||||
|
|
||||||
jobc = &data_singleton()->jobc;
|
jobc = &data_singleton()->jobc;
|
||||||
|
DG("givving terminal to job [%i]", j->pgid);
|
||||||
tcsetpgrp(STDIN, j->pgid);
|
tcsetpgrp(STDIN, j->pgid);
|
||||||
|
/* tcsetattr(STDIN, TCSADRAIN, &jobc->shell_tmodes); */
|
||||||
|
|
||||||
if (cont)
|
if (cont)
|
||||||
{
|
{
|
||||||
tcsetattr(STDIN, TCSADRAIN, &j->tmodes);
|
tcsetattr(STDIN, TCSADRAIN, &j->tmodes);
|
||||||
|
|
@ -26,11 +29,12 @@ int put_job_in_foreground(t_job *j, int cont)
|
||||||
}
|
}
|
||||||
job_wait(j->id);
|
job_wait(j->id);
|
||||||
job_remove(j->id);
|
job_remove(j->id);
|
||||||
|
|
||||||
tcsetpgrp(STDIN, jobc->shell_pgid);
|
tcsetpgrp(STDIN, jobc->shell_pgid);
|
||||||
if (SH_HAS_JOBC(data_singleton()->opts))
|
/* if (SH_HAS_JOBC(data_singleton()->opts)) */
|
||||||
{
|
/* { */
|
||||||
tcgetattr(STDIN, &j->tmodes);
|
tcgetattr(STDIN, &j->tmodes);
|
||||||
tcsetattr(STDIN, TCSADRAIN, &jobc->shell_tmodes);
|
tcsetattr(STDIN, TCSADRAIN, &jobc->shell_tmodes);
|
||||||
}
|
/* } */
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/03/10 13:31:16 by jhalford ### ########.fr */
|
/* Updated: 2017/03/10 15:36:08 by jhalford ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue