node.js - 寻找有关如何使用 socket.io 或 IPC 传递文件描述符的示例

标签 node.js sockets unix ipc file-descriptor

我使用终端启动 Node.js 进程 A

进程 A 使用 child_process.spawn 启动进程 B

反过来,进程 B 启动工作进程,这些进程都是相同的类型,我们称它们为 process(es) C

我希望 C 进程写入原始终端,但我希望 B 进程写入日志文件。

为了实现这一点,我目前的信念是我必须使用 IPC 或 socket.io 将表示当前终端的文件描述符传递给进程 B。

我正在寻找有关如何使用 IPC/socket.io 传递文件描述符的示例,但是却空手而归。

我真的在寻找两篇信息:

(a) how to get a file descriptor that represents the current terminal (at it's most basic those fd's are simply the integers 0,1,2 for stdin,stdout, and stderr, but I don't think those will work in my case).

(b) I am looking for a code example on how to pass an fd with IPC in Node.js. (Socket.io would work just as well, if that's possible).

最佳答案

根据我的简短研究,文件描述符似乎只是整数,因此可以使用 JSON 传递它们,如下所示:

JSON.stringify({fd: 18});

您可以使用 Node.js、socket.io 等中的 IPC 传递此数据。

尽管如此,我的研究还表明,仅仅因为您手头有一个“代表文件描述符”的整数,并不能为您提供太多保证。

更多信息:

如果您在终端运行“tty”命令,如下所示:

$ tty

你会得到这样的东西:

/dev/ttys001

然后在 Node.js 中,如果你这样做的话

const fd = fs.openSync('/dev/ttys001','a');

然后你将获得 tty 的文件描述符,并且 fd 应该是一个整数。

您可以使用该信息写入 tty,如下所示:

const fd = fs.openSync('/dev/ttys001','a');

const stream = fs.createWriteStream(null,{fd:fd});

process.stdout.pipe(stream);
process.stderr.pipe(stream);

我花了一段时间才弄清楚这一点,所以也许它会对你有所帮助。

关于node.js - 寻找有关如何使用 socket.io 或 IPC 传递文件描述符的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40619819/

相关文章:

c - 为什么 sizeof 在 C 中对同一个字符串返回不同的值?

javascript - 原始 h264 转 GIF Node js

node.js - 无法在 debian 上安装 node-libcurl

javascript - res.send 不是函数

Java - AttachNotSupportedException : Unable to open socket file: HotSpot VM not loaded

Windows RIO socket Registered I/O 发送延迟 RIOSend

javascript - 如何通过字段值 mongodb 唯一搜索字段?

sockets - 非阻塞套接字轮询与阻塞套接字

unix - Unix 管理员应该具备哪些编程能力?

c++ - 如何在 Windows Vista 上编译为 Linux/Unix 编写的 C++ 源代码(给出的代码)