![建立/連接到 I/O 流的命令?](https://rvso.com/image/170264/%E5%BB%BA%E7%AB%8B%2F%E9%80%A3%E6%8E%A5%E5%88%B0%20I%2FO%20%E6%B5%81%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
所以我嘗試透過重定向 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
。