node.js - 写入节点中的文件描述符 3
问题描述
console.log
用于process.stdout.write
写入文件描述符 (fd) 1
和
console.error
用于process.stderr.write
写入文件描述符 (fd) 2
如何创建新的文件描述符 3?并写信给它?
更新:使用net
import net from 'net'
const example = new net.Socket({ fd: 3, writable: true })
const buffBaby = Buffer.from('meow', 'utf8')
example.write(buffBaby)
我收到此错误:
错误:ENOTTY:设备的 ioctl 不合适,uv_pipe_open
我试过这个:
const fs = require('fs');
const fd3 = fs.createWriteStream(null, {fd: 3});
fd3.write("Hello to FD 3!\n");
错误:ENXIO:没有这样的设备或地址,写
解决方案
我假设您的进程已经考虑了这样的 FD,否则您会问如何写入文件或套接字而不是 FD。假设是这样,这将起作用:
const fs = require('fs');
const fd3 = fs.createWriteStream(null, {fd: 3});
fd3.write("Hello to FD 3!\n");
这将创建一个与 FD 3 相关联的新流,就像process.stdout
与 FD 1process.stderr
相关联并与 FD 2 相关联一样。
我假设您的 FD 处于阻塞状态(Linux 中 FD 的默认设置)。如果由于某种原因它是非阻塞的,那么您需要将其更改回阻塞或net.Socket
改用。
如果您在没有给它写入 FD 的情况下运行该代码,那么可能会发生这样的糟糕事情:
events.js:292
throw er; // Unhandled 'error' event
^
Error: EINVAL: invalid argument, write
Emitted 'error' event on WriteStream instance at:
at emitErrorNT (internal/streams/destroy.js:96:8)
at emitErrorCloseNT (internal/streams/destroy.js:68:3)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: -22,
code: 'EINVAL',
syscall: 'write'
}
Aborted (core dumped)
或者也许是这样:
events.js:292
throw er; // Unhandled 'error' event
^
Error: EBADF: bad file descriptor, close
Emitted 'error' event on WriteStream instance at:
at emitErrorNT (internal/streams/destroy.js:96:8)
at emitErrorCloseNT (internal/streams/destroy.js:68:3)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
errno: -9,
code: 'EBADF',
syscall: 'close'
}
如果您确实想从节点打开 FD,那么您可以使用任何普通的打开文件的方法来执行此操作。但是,在这种情况下你不能保证 FD 3,因为很有可能 Node 内部的某些东西已经在使用 FD 3,你不能只是从它下面偷走它。
推荐阅读
- ios - 单击“返回”按钮后,Google 地图在 iOS Flutter 应用程序中消失
- jboss - java.lang.IllegalArgumentException: XNIO001001: 在配置 JBoss EAP 7.1 客户端时没有找到 XNIO 提供者
- javascript - 用ajax加载主要内容
- kotlin - Kotlin Job.join()
- angular - Zuul 代理、eureka 服务器和 Angular 6
- bash - 如何删除文件中每一行的第一个空格之后的所有内容?
- c# - 递归方法进入死循环
- java - 将 Java RSA 非对称加密转换为 Flutter Dart
- python - 递归错误:尝试从 python 文件中使用 openpyxl 创建独立的可执行文件
- ios - 在模块/文件夹级别添加源文档的可能性是什么?