so what I'm basically asking is, if a builtin command occurs in the middle of a pipe sequence, is it executed in the parent shell process or as a subprocess?
In case it is executed in parent process, then we have the tedious task of closing the appropriate FDs before executing the next command, as the code never reaches ,
say case 0 : of your eg. statement.
the code for that would look like so:
Code:
for( all piped commands)
{
if (builtin)
{
execute the builtin command code here
close appropriate pipe ends to accomodate code for external commands
}
else
{
if(c->next !=NULL)
{
if(pipe(fd_pipe)<0)
{
perror("pipe");
}
}
switch(pid= fork())
{
case -1 :
perror("fork");
break;
default:
//Close parent's copy of the write end of the pipe
if(fd_pipe[1]>=0) close(fd_pipe[1]);
//Store the intermediate read end which will
//be used as read end for next process in the pipe
//Close it for the last command as there is no one to read after it.
if(intermed_desc >=0) close(intermed_desc);
intermed_desc = fd_pipe[0];
//Throw away pipe
fd_pipe[0] = -1;
fd_pipe[1]= -1;
break;
case 0 :
// Map the intermediate read end stored to STDIN
if(intermed_desc>=0)
{
if(dup2(intermed_desc, STDIN_FILENO)<0)
{
perror("dup2");
}
close(intermed_desc);
}
//Map write end of pipe to STDOUT
if(fd_pipe[1]>=0)
{
if(dup2(fd_pipe[1], STDOUT_FILENO)<0)
{
perror("dup2");
}
close(fd_pipe[1]);
close(fd_pipe[0]);
}
resolv_path(c,portion);
if(execv(portion,c->args)<0)
{
perror("execv");
}
}
}
In case we execute the external version directly, then we needn't worry about closing the pipe ends correctly, as the builtin would be exec'ed like a normal external command.
Hi,
Can the cd command be invoked using pipes???
My actual question is slightly different. I am trying to run an executable from different folders and the path of these folders are obtained dynamically from the front end. Is there a way in which i can actually run the executable... (2 Replies)
Hi...Can anyone please guide me on FIFO Pipes in UNIX.I have lerant things like creating fifo pipes,using them for reads and writes etc.I want to know what is the maximum amount of memory that such a pipe may have? Also can anyone guide me on where to get info on this topic from? (4 Replies)
This is something I've given a lot of thought to and come up with no answer.
Say you have a data stream passing from a file, through process A, into process B. Process A only modifies a few bytes of the stream, then prints the rest of the stream unmodified. Is there any way to stream the file... (4 Replies)
im trying to figure out how to do the following:
using pipes to combine grep and find commands to print all lines in files that start with the letter f in the current directory that contain the word "test" for example?
again using pipes to combine grep and find command, how can I print all... (1 Reply)
I am really new to UNIX and programming in general and so apologies if this thread is a bit simple.
I have searched and found a piece of sample code for a training program I am currently undertaking, but seeing as I am relatively new, I dont completely understand how it works.
Here is the... (1 Reply)
I am really new to UNIX and programming in general and so apologies if this thread is a bit simple.
I have searched and found a piece of sample code for a training program I am currently undertaking, but seeing as I am relatively new, I dont completely understand how it works.
Here is the... (6 Replies)
Hello all, I am trying to learn more about programming Unix pipes in C.
I have created a pipe that does od -bc < myfile | head
Now, I am trying to create od -bc < myfile | head | wc
Here is my code, and I know I might be off, thats why I am here so I can get some clarification.
#include... (1 Reply)
Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!
1. The problem statement, all variables and given/known data:
Create a pipe to show the number of people who are logged into the system right now.
Create a pipe to show... (2 Replies)
Discussion started by: lakers34kb
2 Replies
LEARN ABOUT OPENSOLARIS
whereis
whereis(1B) SunOS/BSD Compatibility Package Commands whereis(1B)NAME
whereis - locate the binary, source, and manual page files for a command
SYNOPSIS
/usr/ucb/whereis [-bmsu] [-BMS directory... -f] filename...
DESCRIPTION
The whereis utility locates source/binary and manuals sections for specified files. The supplied names are first stripped of leading path-
name components and any (single) trailing extension of the form .ext, for example, .c. Prefixes of s. resulting from use of source code
control are also dealt with. whereis then attempts to locate the desired program in a list of standard places:
etc
/sbin
/usr/bin
/usr/ccs/bin
/usr/ccs/lib
/usr/lang
/usr/lbin
/usr/lib
/usr/sbin
/usr/ucb
/usr/ucblib
/usr/ucbinclude
/usr/games
/usr/local
/usr/local/bin
/usr/new
/usr/old
/usr/hosts
/usr/include
/usr/etc
OPTIONS
The following options are supported:
-b Searches only for binaries.
-B Changes or otherwise limits the places where whereis searches for binaries.
-f Terminates the last directory list and signals the start of file names, and must be used when any of the -B, -M, or -S options are
used.
-m Searches only for manual sections.
-M Changes or otherwise limits the places where whereis searches for manual sections.
-s Searches only for sources.
-S Changes or otherwise limit the places where whereis searches for sources.
-u Searches for unusual entries. A file is said to be unusual if it does not have one entry of each requested type. Thus `whereis -m -u
*' asks for those files in the current directory which have no documentation.
EXAMPLES
Example 1 Finding files
Find all files in /usr/bin which are not documented in /usr/share/man/man1 with source in /usr/src/cmd:
example% cd /usr/ucb
example% whereis -u -M /usr/share/man/man1 -S /usr/src/cmd -f *
FILES
o /usr/src/*
o /usr/{doc,man}/*
o /etc, /usr/{lib,bin,ucb,old,new,local}
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|Availability |SUNWscpu |
+-----------------------------+-----------------------------+
SEE ALSO chdir(2), attributes(5)BUGS
Since whereis uses chdir(2) to run faster, pathnames given with the -M, -S, or -B must be full; that is, they must begin with a `/'.
SunOS 5.11 10 Jan 2000 whereis(1B)