[Tarantool-patches] [PATCH] fio: provide access to stdin/stdout/stderr

olegrok at tarantool.org olegrok at tarantool.org
Sat Apr 4 12:53:15 MSK 2020


From: Oleg Babin <babinoleg at mail.ru>

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



More information about the Tarantool-patches mailing list