The following AmigaDOS script works as expected:
It outputs:
That's PortablE code, but it's close enough to C that you should be able to see basically what I'm doing. Unfortunately it output's the following before permanently hanging on the second Pipe:
Can someone please point out what I am doing wrong?
Echo "Hello One" >PIPE: Echo "Hello Two" >PIPE: Echo "1st PIPE: " NOLINE Type PIPE: Echo "2nd PIPE: " NOLINE Type PIPE:
1st PIPE: Hello One 2nd PIPE: Hello TwoHowever, when I try to do a similar thing using compiled code, it does not do what I expect:
MODULE 'dos' PROC main() DEF inp1:BPTR, out1:BPTR DEF inp2:BPTR, out2:BPTR DEF len, buffer[100]:STRING out1 := Open('PIPE:', MODE_OLDFILE) inp1 := Open('PIPE:', MODE_NEWFILE) out2 := Open('PIPE:', MODE_OLDFILE) inp2 := Open('PIPE:', MODE_NEWFILE) Write(inp1, 'Hello One', STRLEN) Write(inp2, 'Hello Two', STRLEN) IF inp1 THEN Close(inp1) ; inp1 := NIL IF inp2 THEN Close(inp2) ; inp2 := NIL len := Read(out1, buffer, 100) ; SetStr(buffer, len) ; Print('out1 => "\s"\n', buffer) len := Read(out2, buffer, 100) ; SetStr(buffer, len) ; Print('out2 => "\s"\n', buffer) FINALLY PrintException() IF inp1 THEN Close(inp1) IF inp2 THEN Close(inp2) IF out1 THEN Close(out1) IF out2 THEN Close(out2) ENDPROC
out1 => "Hello OneHello Two"I have tried the following variation of my code (calling Write() & Close() earlier), with no change/improvement:
MODULE 'dos' PROC main() DEF inp1:BPTR, out1:BPTR DEF inp2:BPTR, out2:BPTR DEF len, buffer[100]:STRING out1 := Open('PIPE:', MODE_OLDFILE) inp1 := Open('PIPE:', MODE_NEWFILE) Write(inp1, 'Hello One', STRLEN) IF inp1 THEN Close(inp1) ; inp1 := NIL out2 := Open('PIPE:', MODE_OLDFILE) inp2 := Open('PIPE:', MODE_NEWFILE) Write(inp2, 'Hello Two', STRLEN) IF inp2 THEN Close(inp2) ; inp2 := NIL len := Read(out1, buffer, 100) ; SetStr(buffer, len) ; Print('out1 => "\s"\n', buffer) len := Read(out2, buffer, 100) ; SetStr(buffer, len) ; Print('out2 => "\s"\n', buffer) FINALLY PrintException() IF inp1 THEN Close(inp1) IF inp2 THEN Close(inp2) IF out1 THEN Close(out1) IF out2 THEN Close(out2) ENDPROC
Author of the PortablE programming language. I love using Amiga OS4.1 on my X1000 & Sam440 :-D
Author of the PortablE programming language. I love using Amiga OS4.1 on my X1000 & Sam440 :-D
Author of the PortablE programming language. I love using Amiga OS4.1 on my X1000 & Sam440 :-D