summaryrefslogtreecommitdiff
path: root/userspace/piper.c
diff options
context:
space:
mode:
Diffstat (limited to 'userspace/piper.c')
-rw-r--r--userspace/piper.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/userspace/piper.c b/userspace/piper.c
index f45248e..80cbd27 100644
--- a/userspace/piper.c
+++ b/userspace/piper.c
@@ -1,38 +1,27 @@
#include <stdio.h>
#include "newcalls.h"
+extern **environ;
+
int main()
{
int fds[2];
_pipe(fds);
- printf("opened pipe / in fd=%d,out fd=%d\n",fds[0],fds[1]);
-
int pid=_fork();
if(pid)
{
- while(1) // read forever from our pipe and echo to stdout
- {
- char buf[256];
- int len=fread(buf,1,255,fds[0]);
- //int len=_read(fds[0],buf,255);
- buf[len]=0;
- printf("-\n");
- printf("%s\n",buf);
- printf("-\n");
- }
-
+ _close(fds[1]);
+ _dup2(fds[0],0); // replace stdin with the read-end of pipe
+ char *args[]={"grep",NULL};
+ _execve("/bin/grep",args,environ);
}
else
{
-
- // write to our pipe
- _write(fds[1],"Hello\n",fds[1]);
- _write(fds[1],"Bello\n",fds[1]);
-
- // hang forever
- while(1);
+ _close(fds[0]);
+ _dup2(fds[1],1); // replace stdout with the write-end of our pipe
+ char *args[]={"cat","hello.txt",0};
+ _execve("/bin/cat",args,environ);
}
-
}