zOs/REXX/USSPIPE

/* rexx */
call sysCall 'pipe pi.'
say 'descInp' pi.1 'descOut' pi.2
say 'o_nonblock' o_nonblock
call sysCall 'f_setfl' pi.1 4
r1 = 'not read'
rv = sysCall('read' pi.1 'r1 100')
say 'read1 retval' rv 'read' r1
l1 = 'write 1 to pipe'
call sysCall 'write' pi.2 'l1'
rv = sysCall('read' pi.1 'r1 100')
say 'read2 retVal' rv 'read' r1
call sysCall 'read' 99 'r1 100'
exit

sysCall:
parse arg ggSysCall, ggRet
    say '>>>sysCall' ggSysCall
    address sysCall ggSysCall
    ggRV = retVal
    if rc <> 0 | errNo <> 0 then do
        say 'rc='rc 'retVal' retVal 'errNo' errNo 'errNoJR' errNoJR ,
            'for syscall' ggSysCall
        address syscall 'strerror' errNo errNoJR  'ggSce.'
        do ggX=1 to ggSce.0
            say ' ' ggSce.ggX
            end
        end
    return ggRV