Tarantool development patches archive
 help / color / mirror / Atom feed
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

             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