问题标签 [file-descriptor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 指定文件描述符编号?
我的理解是,在使用 open() 打开新文件时,无法控制操作系统分配的文件描述符(整数)。那么如何在 bash shell 中使用类似的命令分配特定的文件描述符
(我想我可以通过阅读 bash 资源来找出答案......)
c - 进程可以创建额外的 shell 可重定向文件描述符吗?
例如,进程“foo”是否可以写入文件描述符 3,在 bash shell 中可以这样做
如果是这样,您将如何编写它(用 C 语言)?
c - 使用单个函数调用写入多个文件描述符
我有一个群聊服务器的用例,服务器必须向所有客户端的套接字写入一个公共字符串。然后我通过遍历文件描述符列表并将字符串写入每个文件描述符来解决这个问题。
现在我正在考虑找到更好的解决方案。是否可以通过在 linux 中使用 tee 系统调用从服务器调用单个函数来执行此操作。我希望一个 tee 的输出也可以到下一个 tee 以及客户端套接字。我想知道是否可以将 tee 一端的文件描述符复制到客户端套接字并获得所需的效果。
请为您知道的用例建议任何其他实现。
谢谢
linux - 如何检测何时有人在 Linux 中打开 pty(伪终端)的从属端?
从串行设备(/dev/ttyXX)读取多个进程使得这两个进程无法获取所有数据——数据将以某种方式在它们之间拆分。我想编写一个从串行设备读取的程序,创建几个主/从 pty 对,然后允许从串行设备读取的程序改为从 pty 读取,以便所有读取进程都接收数据从串行设备开始,让 pty 像串行设备一样工作,因为当它们开始从 pty 读取时,它们只会获得最新的数据。换句话说,您不会得到任何在开始阅读之前写入的数据(根据我的经验,这就是 /dev/ttyXX 设备的工作方式,或者至少是我正在阅读的 RS-232 风速计)。命名管道可以通过捕获 SIGPIPE 来模拟这些语义,以确定没有读取器,因此我们可以选择不写入特定的命名管道。然而,一些为使用终端而编写的二进制文件在与命名管道通信时可能会失败,因为检查 isatty() 和 tcsetattr() 等调用时的 errno 条件可能会导致失败条件。这里的关键是能够使用为终端编写的现有二进制文件。
因此,如果我可以检测到何时打开 pty 的从属端进行读取,这应该给我提供与命名管道案例中没有 SIGPIPE 大致相同的语义。我注意到 HP-UX 将 TIOCTRAP 作为 ioctl() 命令,这似乎完全符合我的要求,但遗憾的是它在 Linux 上不可用。
几天来我一直在阅读参考资料,这类事情的选择数量是惊人的。答案可能在于终端设置、阻塞/非阻塞行为、在某处设置缓冲区大小、从 poll()/select() 报告的条件或某种组合。不过,我似乎找不到任何东西。我想知道是否有可能我需要编写自己的设备驱动程序,但似乎我应该能够做到这一点而无需走那么远。
因此,为了澄清:
- 问题是:如何检测有人在 Linux 中打开 pty(伪终端)的从属端?
- 我希望阅读器打开 pty 的从端以在阅读器打开 pty 后严格接收写入的数据(如果我的多写过程只是在阅读器打开从端之前写入数据一段时间,数据将缓冲起来并最终写入器将阻塞,从属读取器在打开时将立即获取所有缓冲数据——这是不可取的,因为我希望它只获取在紧邻时间附近生成的数据)
——它必须是一个 pty,而不是命名管道、套接字等,因为 isatty() 和 tcsetattr() 等需要正常,以便现有的二进制文件工作
c++ - 关于 STDIN STDOUT STDERR 的问题
我正在用 C++ 设计一个 MIPS 模拟器,我的简化操作系统必须能够偶尔运行 stat() (当在我的模拟器上执行的程序需要输入或输出或其他东西时。)
问题是,我需要能够将 STDIN、STDOUT 和 STDERR 声明为 stat "stat("stdin",buff)" 的参数,其中 buff 是指向插入点的指针,用于在内存中返回的结构数据。实际上,我将使用 fstat() ,它使用文件描述符指向要统计的文件。我的简单操作系统中的文件描述符表为标准输入、标准输出和标准错误保留了 0、1 和 2。我对什么是 STDIN 等感到有点困惑。它们是流,我意识到,它们是在 stdio.h 中定义的,但是我究竟如何获得一个包含有关每个流的文件的所有相关信息的 stat 结构?
c++ - 如何访问打开文件的文件描述符
有什么方法可以访问在 c++ 中打开的文件的文件描述符?所以 ...
问题是,ifstreams 是否存在类似 fileDesc 的东西?如果不是,我将如何去做?
process - 使用文件描述符传递时预先存在的连接状态?
我正在玩网络服务器,使用 unix 套接字和 sendmsg / recvmsg 将套接字文件描述符传递给新的服务器进程而不会丢失任何请求。在使用 ab 进行测试时,我发现客户端连接会持续存在,并且 apachebench (ab) 会显示错误:“apr_poll: The timeout specified has expired (70007)”。
我怀疑文件描述符的地址发生了变化,这会使打开的连接变得无用,但是确保在每个请求结束时关闭连接并没有什么不同,一些请求会失败。
在套接字级别是否有一些额外的奇怪或者只是很奇怪?还有什么我应该考虑的吗?
编辑:使用 PHP 作为客户端发出请求也会在周期内停止。
android - 如何将 FileDescriptor 与 HTTP URL 一起使用
我希望这可以让 AndroidMediaPlayer
使用身份验证从 URL 流式传输,但现在我不太确定。我没有问题让它从开放服务器流式传输(无身份验证),但我看不到任何方法可以告诉MediaPlayer
使用基本身份验证,除非使用FileDescriptor
参数可能有效?所以我尝试了这个但得到了以下错误:
我的代码看起来像这样:
说 aFileDescriptor
只能用于本地file://
URL 而不能用于普通http://
URL 是否正确?如果是这样,是否有人对如何从需要使用 Android 进行身份验证的服务器进行流式传输有任何其他想法MediaPlayer
?
macos - 如何在 OSX 上创建没有后备文件的内存映射文件?
我想使用一个使用文件描述符作为访问其数据的基本手段的库。出于性能原因,我不想在使用这个库的函数之前都将文件提交到磁盘。
我想动态创建(大)数据块,并调用库将它们发送到服务器。就目前而言,我必须将文件写入磁盘,打开它,将 FD 传递给库,等待它完成,然后删除磁盘上的文件。由于我可以按需重新创建 blob(并且它们不会太大以至于导致过多的虚拟内存分页),因此将它们保存到磁盘对我没有任何好处,并且会导致很大的性能损失。
是否可以将 FD 分配给仅作为内存映射实体驻留的数据块?