建立/連接到 I/O 流的命令?

建立/連接到 I/O 流的命令?

所以我嘗試透過重定向 I/O 連接到嵌入在程式中的 (Lua) 偵錯器。目前,我為讀取和寫入流建立一對 FIFO,並使用cat /tmp/dbg_write & cat > /tmp/dbg_read.這是可行的並且非常簡單,但是如果您沒有正確退出所有內容,則必須返回並終止後台 cat 命令。我認為是時候進行學習體驗了,因為似乎有必須是一個更好的方式。但我完全被難住了。

在內部我只是重寫偵錯工具的使用 FIFO 的 I/O 函數,因為在這種情況下 stdio 是不行的。據我所知,沒有辦法使用標準 Lua API(如套接字)進行雙向 I/O,並且拉入本機庫是不可能的,因為它是嵌入式的。

local dbg = require("debugger")

local READ_PIPE, WRITE_PIPE = "/tmp/dbg_read", "/tmp/dbg_write"
os.execute(string.format("mkfifo %s %s", READ_PIPE, WRITE_PIPE))
local input, output = io.open(READ_PIPE, "r"), io.open(WRITE_PIPE, "w")

function dbg.read(prompt)
    dbg.write(prompt)
    return input:read()
end

function dbg.write(str)
    output:write(str)
    output:flush()
end

我也嘗試過:

  • 用於popen("netcat -lU")建立 Unix 域套接字,但管道是單向的。德普。
  • 使用現有的 pty。看起來很有希望,只是我不知道如何創建一個與想要從中讀取資料的外殼分開的外殼。
  • 使用 screen...以某種方式創建一個我可以與之互動的 tty 會話。 (不知道...)
  • 找到一個現有的實用程序,可以從文件/管道複製到標準輸出,同時也可以從標準輸入複製到另一個。

我缺少什麼明顯的東西嗎?

答案1

您可以做的是創建兩個背靠背的虛擬終端socat

$ socat pty,link=/tmp/lua_end pty,link=/tmp/screen_end

現在,從 lua 中,您只需讀取和寫入單一檔案:/tmp/lua_end

在另一個 shell 中,您可以執行以下操作:

$ screen /tmp/screen_end

就是這樣,他們將透過 進行連接socat

相關內容