Note that there are some explanatory texts on larger screens.

plurals
  1. POMultiprogramming in Unix
    primarykey
    data
    text
    <p>I have some problems trying to make a simple program using execlp, fork and pipes. The program at hand is supossed to do "last |head -5| sort" but it doesn't work. Here is the code.</p> <pre><code>#include &lt;string.h&gt; #include &lt;fcntl.h&gt; #include &lt;stdio.h&gt; #include &lt;errno.h&gt; #include &lt;sys/types.h&gt; #include &lt;sys/stat.h&gt; //last |head -5| sort int main(int argc, char* argv[]){ int buzon[2]; int buzon2[2]; if(pipe(buzon) &lt; 0) error("error de pipe"); switch(fork()){ case -1: error("error de fork"); case 0: if(close(1) &lt; 0) error("error de close"); if(dup(buzon[1]) &lt; 0) error("error de dup"); if(close(buzon[0]) &lt; 0) error("error de close"); if(close(buzon[1]) &lt; 0) error("error de close"); execlp("last", "last", NULL); error("error de execlp"); } switch(fork()){ case -1: error("error de fork"); case 0: if(close(0) &lt; 0) error("error de close"); if(close(1) &lt; 0) error("error de close"); if(dup(buzon[0]) &lt; 0) error("error de dup"); if(dup(buzon[1]) &lt; 0) error("error de dup"); if(close(buzon[0]) &lt; 0) error("error de close"); if(close(buzon[1]) &lt; 0) error("error de close"); execlp("head", "head", "-n 5", NULL); error("error de execlp"); } switch(fork()){ case -1: error("error de fork"); case 0: if(close(0)&lt;0) error("error de close"); if(dup(buzon[0]) != 1) error("error de dup"); if(close(buzon[0]) &lt; 0) error("error de close"); if(close(buzon[1]) &lt; 0) error("error de close"); execlp("sort", "sort", NULL); error("error de execlp"); } if(close(buzon[0]) &lt; 0) error("error de close"); if(close(buzon[1]) &lt; 0) error("error de close"); while(wait(NULL) != -1); } </code></pre> <p>Any idea of what fails. The problem is when I use 2 pipes. If I make a program which only uses 1 pipe, it works.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload