{% skip_file unless flag?(:linux) && !flag?(:interpreted) %} require "spec" require "syscall" private module TestSyscall Syscall.def_syscall pipe2, Int32, pipefd : Int32[2]*, flags : Int32 Syscall.def_syscall write, Int32, fd : Int32, buf : UInt8*, count : LibC::SizeT Syscall.def_syscall read, Int32, fd : Int32, buf : UInt8*, count : LibC::SizeT Syscall.def_syscall close, Int32, fd : Int32 end describe Syscall do it "can call into the system successfully" do pair = uninitialized Int32[2] TestSyscall.pipe2(pointerof(pair), 0).should eq(0) str = "Hello" TestSyscall.write(pair[1], str.to_unsafe, LibC::SizeT.new(str.bytesize)).should eq(str.bytesize) buf = Bytes.new(64) TestSyscall.read(pair[0], buf.to_unsafe, LibC::SizeT.new(buf.size)).should eq(str.bytesize) String.new(buf.to_unsafe, str.bytesize).should eq(str) TestSyscall.close(pair[0]).should eq(0) TestSyscall.close(pair[1]).should eq(0) end end