From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp41.i.mail.ru (smtp41.i.mail.ru [94.100.177.101]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id A656C4696C3 for ; Sat, 4 Apr 2020 12:53:16 +0300 (MSK) From: olegrok@tarantool.org Date: Sat, 4 Apr 2020 12:53:15 +0300 Message-Id: <20200404095315.32905-1-olegrok@tarantool.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH] fio: provide access to stdin/stdout/stderr List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: imun@tarantool.org, v.shpilevoy@tarantool.org Cc: tarantool-patches@dev.tarantool.org From: Oleg Babin This patch introduces fio API for interaction with stdin/stdout/stderr streams. Closes #1338 @TarantoolBot document Title: fio provides access to stdin/stdout/stderr Now access to standard streams is available via: * fio.stdin * fio.stdout * fio.stderr Each of this streams have usual fio file interface. Example: ```lua fio.stdin:read(5) -- read 5 bytes from stdin fio.stdout:write("Hello") -- write "Hello" to stdout fio.stderr:write("Error") -- write "Error" to stderr ``` --- Issue: https://github.com/tarantool/tarantool/issues/1338 Branch: https://github.com/tarantool/tarantool/tree/olegrok/1338-fio-std-streams @ChangeLog - fio provides access to stdin/stdout/stderr (gh-1338) src/lua/fio.lua | 10 ++++++++++ test/app/fio.result | 27 +++++++++++++++++++++++++++ test/app/fio.test.lua | 11 +++++++++++ 3 files changed, 48 insertions(+) diff --git a/src/lua/fio.lua b/src/lua/fio.lua index 83fddaa0a..1eaa085ae 100644 --- a/src/lua/fio.lua +++ b/src/lua/fio.lua @@ -17,6 +17,12 @@ ffi.cdef[[ }; ]] +local filenos = { + STDIN = 0, + STDOUT = 1, + STDERR = 2, +} + local const_char_ptr_t = ffi.typeof('const char *') local internal = fio.internal @@ -522,6 +528,10 @@ fio.utime = function(path, atime, mtime) return internal.utime(path, atime, mtime) end +fio.stdin = ffi.new('struct fio_handle', filenos.STDIN) +fio.stdout = ffi.new('struct fio_handle', filenos.STDOUT) +fio.stderr = ffi.new('struct fio_handle', filenos.STDERR) + fio.path = {} fio.path.is_file = function(filename) local fs = fio.stat(filename) diff --git a/test/app/fio.result b/test/app/fio.result index 783fa4fab..3c6649c8b 100644 --- a/test/app/fio.result +++ b/test/app/fio.result @@ -1524,3 +1524,30 @@ tmpdir = nil os.setenv('TMPDIR', old_tmpdir) --- ... +-- +-- gh-1338: provide access to stdin/stdout/stderr +-- +fio.stdin.fh == 0 +--- +- true +... +fio.stdout.fh == 1 +--- +- true +... +fio.stderr.fh == 2 +--- +- true +... +fio.stdin:read(0) +--- +- +... +fio.stdout:write('\0') +--- +- true +... +fio.stderr:write('\0') +--- +- true +... diff --git a/test/app/fio.test.lua b/test/app/fio.test.lua index 6825b882f..f55747c18 100644 --- a/test/app/fio.test.lua +++ b/test/app/fio.test.lua @@ -502,3 +502,14 @@ fio.tempdir() tmpdir = nil os.setenv('TMPDIR', old_tmpdir) + +-- +-- gh-1338: provide access to stdin/stdout/stderr +-- +fio.stdin.fh == 0 +fio.stdout.fh == 1 +fio.stderr.fh == 2 + +fio.stdin:read(0) +fio.stdout:write('\0') +fio.stderr:write('\0') -- 2.23.0