10-26-2007
Presumably because the shell itself still has both ends of both pipes still open.
Try adding
close(pipe_a[0]);
close(pipe_a[1]);
close(pipe_b[0]);
close(pipe_b[1]);
prior to your wait.
When your shell exits, these file descriptors get closed, hence allowing EOF to be read. EOF will never be read while there is a write end open.
7 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
if somebody can help me pls.
i need the source code for a shell which compiles C or java programs.
i need a very short and simple one, just for the compiling part, in UNIX
Respect (4 Replies)
Discussion started by: zlatan005
4 Replies
2. UNIX for Dummies Questions & Answers
#!/usr/bin/m4
when running m4 scripts with "#!/usr/bin/m4" they are executed properly, but "#!/usr/bin/m4" is printed out - how to avoid it?
Thanks in advance. (5 Replies)
Discussion started by: Action
5 Replies
3. Programming
Hello guys - do you have any sample program implementing UNIX commands in an interpreter with Java? I can look up the simple ones such "ls" etc and then write my own commands.
I would appreciate it. (2 Replies)
Discussion started by: cmontr
2 Replies
4. Shell Programming and Scripting
Hi,
I am writing a shell script that connects to a remote server and performs some tasks on the server and exits.
Since i am using a ssh connection, i am using a "expect" utility to supply the password automatically (which is present within the script).
In order to use this utility, i need to... (3 Replies)
Discussion started by: sunrexstar
3 Replies
5. Shell Programming and Scripting
Hi. My name is Caleb (a.k.a RagingNinja) form the whited00r forums. (Whited00r makes custom firmware for iOS devices).
I have been learning and creating simple shells scripts. I have been recently using VIM for Windows or using VirtualBox to run the UBUNTU OS within VirtualBox to create my shell... (2 Replies)
Discussion started by: RagingNinja
2 Replies
6. Linux
Can you explain me what is ment by interpreter files ??
Why and how they are used?? (1 Reply)
Discussion started by: kkalyan
1 Replies
7. Shell Programming and Scripting
Hi,
Is it possible to choose the inerpreter conditionally.
For example, if whereis bash returns /usr/bin/bash then i need to choose #!/usr/bin/bash
else i need to use #!/usr/bin/sh.
Is it possible to achieve in a shell script?
Thanks (1 Reply)
Discussion started by: pandeesh
1 Replies
CLOSE(2) BSD System Calls Manual CLOSE(2)
NAME
close -- delete a descriptor
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <unistd.h>
int
close(int d);
DESCRIPTION
The close() system call deletes a descriptor from the per-process object reference table. If this is the last reference to the underlying
object, the object will be deactivated. For example, on the last close of a file the current seek pointer associated with the file is lost;
on the last close of a socket(2) associated naming information and queued data are discarded; on the last close of a file holding an advisory
lock the lock is released (see flock(2)).
When a process exits, all associated descriptors are freed, but since there is a limit on active descriptors per processes, the close() sys-
tem call is useful when a large quantity of file descriptors are being handled.
When a process calls fork(2), all descriptors for the new child process reference the same objects as they did in the parent before the
fork(). If a new process is then to be run using execve(2), the process would normally inherit these descriptors. Most of the descriptors
can be rearranged with dup2(2) or deleted with close() before the execve() is attempted, but if some of these descriptors will still be
needed if the execve() fails, it is necessary to arrange for them to be closed only if the execve() succeeds. For this reason, the system
call
fcntl(d, F_SETFD, 1);
is provided, which arranges that a descriptor ``d'' will be closed after a successful execve(); the system call
fcntl(d, F_SETFD, 0);
restores the default, which is to not close descriptor ``d''.
RETURN VALUES
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned and errno is set to indicate the error.
ERRORS
close() will fail if:
[EBADF] d is not an active descriptor.
[EINTR] An interrupt was received.
SEE ALSO
accept(2), execve(2), fcntl(2), flock(2), open(2), pipe(2), socket(2), socketpair(2)
STANDARDS
The close() function conforms to ISO/IEC 9945-1:1990 (``POSIX.1'').
BSD
April 19, 1994 BSD