[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