pipelining

F

Fara Nasr

Hello everyone

I urgently some help with this code. I am trying to implement the
following pipeline and i keep getting this error Erro:ENOENT
can anybody please help me to get this code working


#input is the command line
def handleCommandLine(input)
# it splits the pipeline into an array
command = input.split('|').map{|c|word_list(c)}
i = 0
while i< command.length
commands = command.at(i)
execute(commands)
i +=1
end
end

def execute(commands)
rd, wr = IO.pipe
if fork.nil?
# child
rd.close
$stdout.reopen(wr)
wr.close
exec(*commands)
exit
else
# parent
wr.close
$stdin.reopen(rd)
rd.close
end
end
 
T

Tim Pease

Hello everyone

I urgently some help with this code. I am trying to implement the
following pipeline and i keep getting this error Erro:ENOENT
can anybody please help me to get this code working

The error is most likely coming from the "exec" command in the forked
child process. It's telling you that one of your commands does not
exist.

Can you post the full error message? That might give some more insight
and a better answer (this is just my best guess).

Blessings,
TwP

PS In your child, call exit! instead of just plain exit. exit! will
prevent the at_exit routines from running and killing file descriptors
in the parent. See the documentation on fork for more details.
 
F

Fara Nasr

Hi Tim,

All right, To illustrate what happens i have add a puts command to the
code ! the result is so bizzare!!!
Here is the code again:


def handleCommandLine(input)
#splits the command line
command = input.split('|').map{|c|word_list(c)}
i = 0
while i< command.length
commands = command.at(i)
puts commands , "...........\n"
execute(commands)
i +=1
end
end
def execute(commands)
rd, wr = IO.pipe
if fork.nil?
# child
rd.close
$stdout.reopen(wr)
wr.close
exec(*commands)
exit
else
# parent
wr.close
$stdin.reopen(rd)
rd.close
Process.wait
end
end



so i used this to test it

001>ls | grep D



here is the result!! the correct result must be 001>Desktop and it has
to stop there!!!




ls
...........
grep
D
...........
001>Desktop
...........
Test.rb:45:in `exec': No such file or directory - Desktop
(Errno::ENOENT)
from Test.rb:45:in `execute'
from Test.rb:32:in `handleCommandLine'
from Test.rb:20:in `run'
from Test.rb:17:in `loop'
from Test.rb:17:in `run'
from Test.rb:68


thanks a lot

Fara
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top