From: olegrok@tarantool.org
To: imun@tarantool.org, v.shpilevoy@tarantool.org
Cc: tarantool-patches@dev.tarantool.org
Subject: [Tarantool-patches] [PATCH] fio: provide access to stdin/stdout/stderr
Date: Sat, 4 Apr 2020 12:53:15 +0300 [thread overview]
Message-ID: <20200404095315.32905-1-olegrok@tarantool.org> (raw)
From: Oleg Babin <babinoleg@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
next reply other threads:[~2020-04-04 9:53 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-04 9:53 olegrok [this message]
2020-04-26 17:47 ` Vladislav Shpilevoy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200404095315.32905-1-olegrok@tarantool.org \
--to=olegrok@tarantool.org \
--cc=imun@tarantool.org \
--cc=tarantool-patches@dev.tarantool.org \
--cc=v.shpilevoy@tarantool.org \
--subject='Re: [Tarantool-patches] [PATCH] fio: provide access to stdin/stdout/stderr' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox