Note that there are some explanatory texts on larger screens.

plurals
  1. POMultiprogramming in Unix
    text
    copied!<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>
 

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