[ale]Stupid pipe question
Joe Steele
joe at madewell.com
Fri Nov 30 18:19:20 EST 2001
The code as modified below should work.
--Joe
-----Original Message-----
From: Chris Fowler [SMTP:cfowler at outpostsentinel.com]
Sent: Friday, November 30, 2001 4:24 PM
To: Ale
Subject: [ale]Stupid pipe question
I'm trying to implement a simple pipe to more in a shell I'm creating. I ahve some test code below
vut is seems not to behave the way I expect. It appears more does some
ioctls() on stdin which in my code is really a pipe. What is the correct way I should do this?
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
/* needed for wait() */
#include <sys/wait.h>
int
main(int argc, char *argv[])
{
int pfd[2];
int pid;
int count; /* bytes read from input */
char buffer[1024];
pipe(pfd);
pid = fork();
if(pid == 0)
{
close(pfd[1]);
dup2(pfd[0], 0);
/* putting this read() here doesn't make sense */
/* read(0, buffer, sizeof(buffer));*/
execl("/bin/more", "/bin/more", 0);
perror("exec");
exit(0);
}
close(pfd[0]);
dup2(pfd[1], 1);
/* this while loop needs refining
* while(read(0, buffer, sizeof(buffer)) > 0)
* write(1, buffer, strlen(buffer));
*/
while((count=read(0, buffer, sizeof(buffer))) > 0)
write(1, buffer, count);
/* need to close all the descriptors for the pipe so "more" sees EOF */
close(1);
close(pfd[1]);
/* need to wait for the child to exit */
wait(NULL);
return 0;
}
---
This message has been sent through the ALE general discussion list.
See http://www.ale.org/mailing-lists.shtml for more info. Problems should be
sent to listmaster at ale dot org.
More information about the Ale
mailing list